接下来要知道的是如何获取表 oid。正如您所怀疑的,我认为将其用作评论的一部分是行不通的。
postgres=# 创建表 comtest1 (id int, val varchar);
创建表
postgres=# 插入 comtest1 值 (1,'a');
插入 0 1
postgres=# 从 comtest1 中选择不同的 tableoid;
表格
----------
32792
(1 行)
postgres=#comtest1.id 列上的注释是“标识符一号”;
评论
postgres=# 选择 col_description(32792,1);
col_description
----------------------
标识符一号
(1 行)
无论如何,我启动了一个快速的 plpgsql 函数来将注释从一个表/列对复制到另一个。您必须在数据库上创建lang 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;