仅使用默认值将行插入Postgresql表

时间:2018-09-21 10:37:46

标签: postgresql

问题:是否可以使用所有列的默认值在PostgreSQL表中插入行而不指定任何列名?

背景:如果我有一个包含两列均具有默认值(或简单地接受NULL)的表,则如果希望插入该列的值,则可以省略列名列作为默认值。例如:

CREATE TABLE test_table ( column1 TEXT, column2 TEXT );

我只能通过为column1或column2指定一个值来插入表中,而缺少的列将使用默认值(在这种情况下为NULL)填充:

INSERT INTO test_table (column1) VALUES ('foo');
INSERT INTO test_table (column2) VALUES ('bar');

以上将导致两行:[('foo',NULL),(NULL,'bar')]。但是,如果我想对两列都使用默认值,似乎我必须至少指定一个列名并显式为其指定默认值。以下命令都是合法的:

INSERT INTO test_table (column1) VALUES (DEFAULT);
INSERT INTO test_table (column2) VALUES (DEFAULT);
INSERT INTO test_table (column1, column2) VALUES (DEFAULT, DEFAULT);

我无法创建允许我忽略所有列名称的有效命令。以下尝试都是非法的:

INSERT INTO test_table;
INSERT INTO test_table () VALUES ();

有没有办法做到这一点,还是明确禁止?我找不到此类案例的任何文档。谢谢!

1 个答案:

答案 0 :(得分:6)

我发现这种确切的用例有特殊的语法:

INSERT INTO test_table DEFAULT VALUES;