次に知っておくべきことは、テーブル oid を取得する方法です。ご想像のとおり、これをコメントの一部として使用しても機能しないと思います。
postgres=# create table comtest1 (id int, val varchar);
テーブルを作成
postgres=# comtest1 値 (1,'a') に挿入します。
挿入 0 1
postgres=# comtest1 から個別の tableoid を選択します。
台形
----------
32792
(1行)
postgres=# 列 comtest1.id のコメントは 'Identifier Number One';
コメント
postgres=# select col_description(32792,1);
col_description
-----------------------
識別子ナンバーワン
(1行)
とにかく、簡単な plpgsql 関数を作成して、あるテーブル/列のペアから別のテーブル/列のペアにコメントをコピーしました。データベースに plpgsql を作成し、次のように使用する必要があります。
テーブル comtest1 の最初の列のコメントを id にコピーします。
表comtest2の列。はい、改善する必要がありますが、
それは読者の仕事として残されています。
postgres=# select copy_comment('comtest1',1,'comtest2','id');
コピーコメント
--------------
1
(1行)
CREATE OR REPLACE FUNCTION copy_comment(varchar,int,varchar,varchar) RETURNS int AS $PROC$
DECLARE
src_tbl ALIAS FOR $1;
src_col ALIAS FOR $2;
dst_tbl ALIAS FOR $3;
dst_col ALIAS FOR $4;
row RECORD;
oid INT;
comment VARCHAR;
BEGIN
FOR row IN EXECUTE 'SELECT DISTINCT tableoid FROM ' || quote_ident(src_tbl) LOOP
oid := row.tableoid;
END LOOP;
FOR row IN EXECUTE 'SELECT col_description(' || quote_literal(oid) || ',' || quote_literal(src_col) || ')' LOOP
comment := row.col_description;
END LOOP;
EXECUTE 'COMMENT ON COLUMN ' || quote_ident(dst_tbl) || '.' || quote_ident(dst_col) || ' IS ' || quote_literal(comment);
RETURN 1;
END;
$PROC$ LANGUAGE plpgsql;