2007/12/18

PostgreSQLのユーザ定義関数

人が作ったDBを別のサーバに移す作業をしたワケですけど、pg_dump で出力したらユーザ定義関数の一部がエクスポートされないいんすよ?なんでだろ?わかんねーや。
#PostgreSQL 7.2.2 on i686-pc-linux-gnu, compiled by GCC 2.96

でも、なんとかしないといけないので、ダルいけど調べて対処しなきゃ。

ユーザ定義関数は システムカタログの pg_proc に格納されてるので、pg_user.usename でユーザID調べて抽出条件にする。
hoge=> SELECT usename, usesysid FROM pg_user;
usename | usesysid
----------+----------
postgres | 1
hoge | 100
(2 rows)

hoge=> SELECT proname, proowner, prosrc FROM pg_proc WHERE proowner = 100;
proname | pronargs | prosrc
---------------+----------+-----------------
foo | 2 | SELECT $1 + $2;
(1 rows)


あれ、引数と戻り値がわかんねーや。どこに格納されてんだろ?
8.0 以降だと、一緒に格納されてるみたいだけど?
まぁいいや、コマンドでしらべよう

hoge=> \df foo
List of functions
Result data type | Name | Argument data types
------------------+------+---------------------
integer | foo | integer, integer
(1 row)


あとは、CREATE FUNCTION で関数作ってやればオッケー
CREATE FUNCTION foo(integer, integer) RETURNS integer
AS 'SELECT $1 + $2;'
LANGUAGE SQL;

0 件のコメント:

Google Analytics