Postgresql
如何在 pg_dump 生成的插入語句中指定列位置?
我需要在表格中的特定位置添加一列。我這樣做是因為我正在合併來自兩個不同數據庫的表:
DB1.schema1.table1
有這些列:name_pk | date | type
雖然
DB2.schema1.table1
有這些:name_pk | date | value | type
我需要添加
value
第一個數據庫,以便我可以轉儲其數據並將其恢復到 DB3(與 DB2 數據一起,DB3 具有與 DB2 相同的列)。解決這個問題的最佳方法是什麼?我想:
- 只需在轉儲數據之前將“值”列添加到 DB1。但是,因為 PostgreSQL 沒有
INSERT ... AFTER
子句,所以列被添加到末尾,這不好。- 將僅包含模式的表轉儲到 中
schema.sql
,手動編輯生成的文件並將缺少的列添加到正確的位置。它可以解決問題,但它需要手動工作,不適合我的腳本通過多個數據庫。- 將列添加到末尾,然後在之後添加其餘列並刪除之前的列。這需要找出其餘列的名稱和類型。
- 有沒有其他方法可以輕鬆做到這一點?
如果您正在使用
pg_dump
,則可以在轉儲數據時使用該--attribute-inserts
標誌 - 它會將列列表添加到生成的INSERT
語句中:postgres=# create table test ( col1 integer, col2 integer, col4 integer, col3 integer ) ; CREATE TABLE postgres=# insert into test values(1,2,4,3); INSERT 0 1 postgres=# \q postgres@ubuntu-xenial:~$ pg_dump --attribute-inserts postgres -- -- PostgreSQL database dump -- -- * OUTPUT SNIPPED * -- -- Data for Name: test; Type: TABLE DATA; Schema: public; Owner: postgres -- INSERT INTO public.test (col1, col2, col4, col3) VALUES (1, 2, 4, 3);
通過這樣做,列的順序無關緊要。