问题:有没有办法在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 ();
有办法做到这一点还是明确被禁止?我无法找到这样的案例的任何文件.谢谢!
解决方法
我发现这个确切的用例有特殊的语法:
INSERT INTO test_table DEFAULT VALUES;