Ale*_*lex 5 postgresql insert subquery default-value
我有一个 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)
)
Run Code Online (Sandbox Code Playgroud)
在许多情况下,我必须从具有相同结构的另一个表中插入记录:
INSERT INTO some_schema.some_table (col2,col3...col35)
SELECT col2,col3...col35
FROM some_schema.another_table_with_same_structure;
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以做到这一点,而不必列出所有没有默认值的列?我想我可以以某种方式使用,但我无法根据文档DEFAULT VALUES
获得正确的语法。
有没有一种方法可以做到这一点,而不必列出所有没有默认值的列?
不,您要么使用扩展插入所有列*
,
INSERT INTO foo
SELECT * FROM bar;
Run Code Online (Sandbox Code Playgroud)
或者,您只插入列出的列
INSERT INTO foo (col2,col3)
SELECT col2, col3
FROM bar;
Run Code Online (Sandbox Code Playgroud)
你也可以表达DEFAULT
得很明确,但没有人这样做。然而,在规范中,显式或隐式列列表中不存在的每一列都将填充一个默认值,要么是其声明的默认值,要么是 null(如果没有)。明确看起来像这样。
INSERT INTO foo (col1,col2,col3)
SELECT DEFAULT, col2, col3
FROM bar;
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9855 次 |
最近记录: |