Postgresql

如何在 pg_dump 生成的插入語句中指定列位置?

  • May 16, 2019

我需要在表格中的特定位置添加一列。我這樣做是因為我正在合併來自兩個不同數據庫的表:

DB1.schema1.table1有這些列:

name_pk | date | type

雖然DB2.schema1.table1有這些:

name_pk | date | value | type

我需要添加value第一個數據庫,以便我可以轉儲其數據並將其恢復到 DB3(與 DB2 數據一起,DB3 具有與 DB2 相同的列)。

解決這個問題的最佳方法是什麼?我想:

  1. 只需在轉儲數據之前將“值”列添加到 DB1。但是,因為 PostgreSQL 沒有INSERT ... AFTER子句,所以列被添加到末尾,這不好。
  2. 將僅包含模式的表轉儲到 中schema.sql,手動編輯生成的文件並將缺少的列添加到正確的位置。它可以解決問題,但它需要手動工作,不適合我的腳本通過多個數據庫。
  3. 將列添加到末尾,然後在之後添加其餘列並刪除之前的列。這需要找出其餘列的名稱和類型。
  4. 有沒有其他方法可以輕鬆做到這一點?

如果您正在使用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);

通過這樣做,列的順序無關緊要。

引用自:https://dba.stackexchange.com/questions/238310