1. 程式人生 > 資料庫 >使用PostgreSQL為表或檢視建立備註的操作

使用PostgreSQL為表或檢視建立備註的操作

1 為表和列建立備註

drop table if exists test;
create table test(
  objectid serial not null,num integer not null,constraint pk_test_objectid primary key (objectid),constraint ck_test_num check(num < 123 ),);
comment on table test is '我是表';
comment on column test.objectid is '我是唯一主鍵';
comment on column test.num is '數量欄位';
comment on constraint pk_test_objectid on test is '我是約束,唯一主鍵';
comment on constraint ck_test_num on test is '我是約束,num欄位必須小於123';
\dS+ test;

2 為檢視和列建立備註

drop view if exists vtest;
create or replace view vtest
 as select 1 as col1,'a' as col2,now() as col3;
comment on view vtest is '檢視備註';
comment on column vtest.col1 is '第一列備註,integer型別';
comment on column vtest.col2 is '第二列備註,字元型別';
comment on column vtest.col3 is '第三列備註,日期時間型別';

3 comment語法

COMMENT ON
{
 ACCESS METHOD object_name |
 AGGREGATE aggregate_name ( aggregate_signature ) |
 CAST (source_type AS target_type) |
 COLLATION object_name |
 COLUMN relation_name.column_name |
 CONSTRAINT constraint_name ON table_name |
 CONSTRAINT constraint_name ON DOMAIN domain_name |
 CONVERSION object_name |
 DATABASE object_name |
 DOMAIN object_name |
 EXTENSION object_name |
 EVENT TRIGGER object_name |
 FOREIGN DATA WRAPPER object_name |
 FOREIGN TABLE object_name |
 FUNCTION function_name [ ( [ [ argmode ] [ argname ] argtype [,...] ] ) ] |
 INDEX object_name |
 LARGE OBJECT large_object_oid |
 MATERIALIZED VIEW object_name |
 OPERATOR operator_name (left_type,right_type) |
 OPERATOR CLASS object_name USING index_method |
 OPERATOR FAMILY object_name USING index_method |
 POLICY policy_name ON table_name |
 [ PROCEDURAL ] LANGUAGE object_name |
 PUBLICATION object_name |
 ROLE object_name |
 RULE rule_name ON table_name |
 SCHEMA object_name |
 SEQUENCE object_name |
 SERVER object_name |
 STATISTICS object_name |
 SUBSCRIPTION object_name |
 TABLE object_name |
 TABLESPACE object_name |
 TEXT SEARCH CONFIGURATION object_name |
 TEXT SEARCH DICTIONARY object_name |
 TEXT SEARCH PARSER object_name |
 TEXT SEARCH TEMPLATE object_name |
 TRANSFORM FOR type_name LANGUAGE lang_name |
 TRIGGER trigger_name ON table_name |
 TYPE object_name |
 VIEW object_name
} IS 'text'
where aggregate_signature is:
* |
[ argmode ] [ argname ] argtype [,... ] |
[ [ argmode ] [ argname ] argtype [,... ] ] ORDER BY [ argmode ] [ argname ] argtype [,... ]

注意:SQL 標準中沒有COMMENT命令。

補充:postgre 查詢註釋_PostgreSQL查詢表以及欄位的備註

查詢所有表名稱以及欄位含義

select c.relname 表名,cast(obj_description(relfilenode,'pg_class') as varchar) 名稱,a.attname 欄位,d.description 欄位備註,concat_ws('',t.typname,SUBSTRING(format_type(a.atttypid,a.atttypmod) from '.∗')) as 列型別 from pg_class c,pg_attribute a,pg_type t,pg_description d
where a.attnum>0 and a.attrelid=c.oid and a.atttypid=t.oid and d.objoid=a.attrelid and d.objsubid=a.attnum
and c.relname in (select tablename from pg_tables where schemaname='public' and position('_2' in tablename)=0) order by c.relname,a.attnum

檢視所有表名

select tablename from pg_tables where schemaname='public' and position('_2' in tablename)=0;
select * from pg_tables;

查看錶名和備註

select relname as tabname,'pg_class') as varchar) as comment from pg_class c
where relname in (select tablename from pg_tables where schemaname='public' and position('_2' in tablename)=0);
select * from pg_class;

檢視特定表名備註

select relname as tabname,'pg_class') as varchar) as comment from pg_class c
where relname ='表名';

檢視特定表名欄位

select a.attnum,a.attname,a.atttypmod) from '.∗')) as type,d.description from pg_class c,pg_description d
where c.relname='表名' and a.attnum>0 and a.attrelid=c.oid and a.atttypid=t.oid and d.objoid=a.attrelid and d.objsubid=a.attnum;

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。