问题:是否可以使用所有列的默认值在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 ();
有没有办法做到这一点,还是明确禁止?我找不到此类案例的任何文档。谢谢!
答案 0 :(得分:6)
我发现这种确切的用例有特殊的语法:
INSERT INTO test_table DEFAULT VALUES;