Postgresql
插入到表中省略具有預設值的列
我有一個 PostgreSQL 數據庫,其中包含許多相同結構的表,總共 36 列:
CREATE TABLE some_schema.some_table ( id integer NOT NULL DEFAULT nextval('some_schema.id_seq'::regclass), col2, col3, col4, [...], col35, mi_prinx integer NOT NULL DEFAULT nextval('some_schema.mi_prinx_seq'::regclass), CONSTRAINT some_table_pkey PRIMARY KEY (mi_prinx) )
在許多情況下,我將不得不從另一個具有相同結構的表中插入記錄:
INSERT INTO some_schema.some_table (col2,col3...col35) SELECT col2,col3...col35 FROM some_schema.another_table_with_same_structure;
有沒有辦法做到這一點而不必列出所有沒有預設值的列?我想我可以
DEFAULT VALUES
以某種方式使用,但我無法根據文件獲得正確的語法。
有沒有辦法做到這一點而不必列出所有沒有預設值的列?
*
不,您要麼使用擴展插入所有列,INSERT INTO foo SELECT * FROM bar;
或者,您只插入列出的列
INSERT INTO foo (col2,col3) SELECT col2, col3 FROM bar;
您也可以使用
DEFAULT
顯式,但沒有人這樣做。但是,在規範中,*顯式或隱式列列表中不存在的每一列都將填充一個預設值,要麼是其聲明的預設值,要麼是 null 如果沒有。*明確看起來像這樣。INSERT INTO foo (col1,col2,col3) SELECT DEFAULT, col2, col3 FROM bar;
DEFAULT COLUMNS
將所有列設置為其各自的預設值。從上的文件DEFAULT COLUMNS
,預設值,所有列都將填充其預設值。
CREATE TABLE foo (id serial, foo serial, bar serial); INSERT INTO foo (id,foo,bar) VALUES (DEFAULT, DEFAULT, DEFAULT); INSERT INTO foo DEFAULT VALUES; INSERT INTO foo(id,foo,bar) VALUES (42,42,DEFAULT); TABLE foo; id | foo | bar ----+-----+----- 1 | 1 | 1 2 | 2 | 2 42 | 42 | 3 (3 rows)