我們如何有條件地將具有默認值的行插入表中?PostgreSQL:條件插入默認值
例如,我們有一列有一列。
CREATE TABLE foo (
id bigserial PRIMARY KEY
);
而且,我們想要做的事象下面這樣:
INSERT INTO foo DEFAULT VALUES
WHERE random() >= 0.5;
但是,我們得到:
ERROR: syntax error at or near "WHERE"
我們如何有條件地將具有默認值的行插入表中?PostgreSQL:條件插入默認值
例如,我們有一列有一列。
CREATE TABLE foo (
id bigserial PRIMARY KEY
);
而且,我們想要做的事象下面這樣:
INSERT INTO foo DEFAULT VALUES
WHERE random() >= 0.5;
但是,我們得到:
ERROR: syntax error at or near "WHERE"
INSERT INTO foo
SELECT -- here is empty select, without any columns
WHERE random() >= 0.5;
PS:有幾個 「好奇」 在PostgreSQL的相關的東西。例如,select;
或甚至更多create table t();
都是有效的語句。
條件插入需要查詢,你可以從INSERT documentation見,query
和DEFAULT VALUES
是獨家組。
當明確定義應填充的列時,您至少需要指定一個列。因此,像這樣也無效:
INSERT INTO foo()
SELECT 1
WHERE random() >= 0.5;
我能想到的只有這樣才能達到同樣的效果是顯式定義「默認」值:
INSERT INTO foo (id)
SELECT nextval('foo_id_seq'::regclass)
WHERE random() > 0.8;
或通過添加另一列
CREATE TABLE foo (
id bigserial PRIMARY KEY,
ignored SMALLINT
);
INSERT INTO foo (ignored)
SELECT 1
WHERE random() >= 0.5;
編輯:
完全錯過了,你可以做空選擇:
INSERT INTO foo
SELECT
WHERE random() >= 0.5;
我相信你有一個理由,但這似乎是一件奇怪的事情。出於好奇,你希望通過這樣做來實現什麼? – That1Guy