1. 程式人生 > 資料庫 >PostgreSQL中的COMMENT用法說明

PostgreSQL中的COMMENT用法說明

PostgreSQL附帶了一個命令 - COMMENT 。如果想要記錄資料庫中的內容,這個命令很有用。本文將介紹如何使用此命令。

隨著資料庫的不斷髮展和資料關係變得越來越複雜,跟蹤資料庫中新增的所有內容會變得非常困難。要記錄資料的組織方式以及可能隨時間新增或更改的元件,有必要新增某種文件。

例如,文件可以寫在外部檔案中,但這會產生一種問題,他們很快就會變為過時的檔案。PostgreSQL有一個解決這個問題的方法:COMMENT命令。使用它可以向各種資料庫物件添加註釋,例如在需要時更新的列,索引,表和函式。

檢視資料和添加註釋

PostgreSQL的psql互動式shell包含許多強大的命令來檢視和操作資料。\d命令會顯示所有可見表,檢視,物化檢視,序列和外部表的列表。還有幾種\d命令的組合可用於指定是否要檢視索引,對映,約束等。結合+(例如\d+),該命令將為您提供物件的擴充套件檢視,包含一個描述列,這是文件或COMMENT編寫的位置。

COMMENT命令是我們將資料描述新增到資料庫物件的方法。不要將COMMENT與\ * * \或 SQL中的 -- 相混淆,因為它們是在SQL檔案中編寫的,在資料​​庫中不可見。另一方面,COMMENT不是標準SQL,而是PostgreSQL獨有的。

有很多資料庫物件可供我們使用COMMENT命令。其中最常見的是表,索引和列。但是,必須是物件的所有者或管理員才能使用COMMENT。

執行\d+以顯示錶及其描述,例如:

postgres=# \d+
                 List of relations
 Schema |    Name    |   Type   | Owner  |  Size  | Description 
--------+------------------+---------------+----------+------------+---------------
public | commenttest   | table     | postgres | 8192 bytes |

由於commenttest是一個剛剛建立的新表,因此Description列為空。可以通過以下命令添加註釋:

postgres=# COMMENT ON TABLE commenttest IS 'A table of students in different departments'; 
COMMENT

現在再次執行\d+,可以看到描述列填充了註釋。

postgres=# \d+
                 List of relations
 Schema |    Name    |   Type   | Owner  |  Size  | Description 
--------+------------------+---------------+----------+------------+---------------
public | commenttest   | table     | postgres | 8192 bytes | A table of students in different departments

這是向表中新增描述資訊的步驟。 接著,我們需要考慮如何向表的列中新增描述。

要查看錶中每個列的描述列,可以執行類似以下命令:

postgres=# \d+ commenttest
                   Table "public.commenttest"
   Column   | Type  | Collation | Nullable | Default | Storage | Stats target | Description 
-----------------+---------+-----------+----------+---------+----------+--------------+-------------
 student_id   | integer |      |     |     | plain  |       | 
 student_name  | text  |      |     |     | extended |       | 
 student_major  | text  |      |     |     | extended |       | 
 department_id  | integer |      |     |     | plain  |       | 
 department_name | text  |      |     |     | extended |       | 
 nationality   | text  |      |     |     | extended |       |

為每列新增描述與我們在表中新增一個列的方式類似。例如:

postgres=# COMMENT ON COLUMN commenttest.student_id IS 'ID of the student';
COMMENT
postgres=# COMMENT ON COLUMN commenttest.student_name IS 'name of the student';
COMMENT
postgres=# COMMENT ON COLUMN commenttest.student_major IS 'major of the student';
COMMENT
postgres=# COMMENT ON COLUMN commenttest.department_id IS 'ID of the department';
COMMENT
postgres=# COMMENT ON COLUMN commenttest.department_name IS 'name of the department';
COMMENT
postgres=# COMMENT ON COLUMN commenttest.nationality IS 'nationality of the student';
COMMENT

新增描述後,再次查看錶的描述列資訊:

postgres=# \d+ commenttest
                      Table "public.commenttest"
   Column   | Type  | Collation | Nullable | Default | Storage | Stats target |    Description     
-----------------+---------+-----------+----------+---------+----------+--------------+----------------------------
 student_id   | integer |      |     |     | plain  |       | ID of the student
 student_name  | text  |      |     |     | extended |       | name of the student
 student_major  | text  |      |     |     | extended |       | major of the student
 department_id  | integer |      |     |     | plain  |       | ID of the department
 department_name | text  |      |     |     | extended |       | name of the department
 nationality   | text  |      |     |     | extended |       | nationality of the student

可以看到描述列已經新增好相應註釋。這樣新增過註釋之後,名字複雜且難懂的列名就能讓終端使用者比較容易理解且不會產生歧義。

我們也可以使用類似的方式向索引中新增描述,這樣在資料庫使用過程中,可以防止由於索引數量的增加而導致的混淆和歧義問題。

而且如果使用pg_dump遷移PostgreSQL資料庫,則使用COMMENT進行的任何註釋都會儲存在轉儲檔案中。

補充:給postgresql資料庫的表和列添加註釋(comment)

postgresql 資料庫國內用的人並不是很多,而一些老專案採用了這個資料庫。維護起來特別麻煩,因為國內用的人比較少,相關資料也很少。

另外還有一些函式,postgresql 也沒有對應的提供。還有對於表分割槽,低版本的 postgresql 資料庫根本都沒有這個功能,不支援。需要自己自動的建立表進行分割槽。

總之 postgresql 資料庫用起來實在是太過麻煩,本文總結了一些給 postgresql 資料庫的表和列添加註釋的方法,方便已經採用 postgresql 資料庫而不得不用的程式設計師。

首先說給表添加註釋:

comment on table xttblog is '業餘草';

其中 xttblog 是表名,新增的註釋是“業餘草”。

給列添加註釋的方法如下:

create table xttblog(id int not null,url_id int); 
comment on column xttblog.id is '主鍵ID,自增';

注意建立表的時候,不能再列後面加 comment 。新增後執行會報錯,因為這是 MySQL,Oracle的用法,不是 Postgresql 的用法。

下面再說說如何查詢表中的註釋。sql 語句如下:

select description from pg_descriptionjoin pg_class on pg_description.objoid = pg_class.oid where relname = 'xttblog'

其中以 pg_ 開頭的表都是 Postgresql 資料庫的系統表。系統表中儲存著很多與表和配置相關的資訊。

PostgreSQL 獲取資料表的註釋資訊和表中欄位的註釋資訊和上面的 SQL 類似。

和表相關的資訊都在 pg_description 這個表中,查 pg_description 這個系統表,裡面有存表和欄位的備註。

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