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進行的任何註釋都會儲存在轉儲檔案中。

 

By kalath