LoginSignup
2
1

More than 5 years have passed since last update.

PostgreSQLでストアドプロシージャを一括ドロップする方法

Last updated at Posted at 2015-09-11

PostgreSQLでストアドプロシージャを一括ドロップする方法

-- PostgreSQL 9.2で動作確認しました
-- 前提:sp_drop_function_allという名前のストアドプロシージャはないと仮定
CREATE OR REPLACE FUNCTION sp_drop_function_all(
) RETURNS int AS $$
DECLARE
  cur refcursor;
  sql_text text;
BEGIN
  OPEN cur FOR
    SELECT
      'DROP FUNCTION IF EXISTS ' || p.proname || '(' || pg_catalog.oidvectortypes(p.proargtypes) || ');'
    FROM
      pg_catalog.pg_proc AS p
    LEFT JOIN
      pg_catalog.pg_namespace AS n
    ON
      n.oid = p.pronamespace
    WHERE
        p.prorettype <> 'pg_catalog.cstring'::pg_catalog.regtype
      AND
        (
          p.proargtypes[0] IS NULL
        OR
          p.proargtypes[0] <> 'pg_catalog.cstring'::pg_catalog.regtype
        )
      AND
        NOT p.proisagg
      AND
        n.nspname = 'public'
      AND
        pg_catalog.pg_function_is_visible(p.oid)
      AND
        p.proname != 'sp_drop_function_all'
  ;
  LOOP
    FETCH NEXT FROM
      cur
    INTO
      sql_text
    ;
    IF NOT FOUND THEN
      EXIT;
    END IF;
    --RAISE NOTICE '%', sql_text;
    EXECUTE sql_text;
  END LOOP;
  CLOSE cur;
  RETURN 0;
END;
$$ LANGUAGE plpgsql;

SELECT * FROM sp_drop_function_all();

DROP FUNCTION IF EXISTS sp_drop_function_all();

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1