2017-07-14 83 views
1

我們如何有條件地將具有默認值的行插入表中?PostgreSQL:條件插入默認值

例如,我們有一列有一列。

CREATE TABLE foo (
    id bigserial PRIMARY KEY 
); 

而且,我們想要做的事象下面這樣:

INSERT INTO foo DEFAULT VALUES 
WHERE random() >= 0.5; 

但是,我們得到:

ERROR: syntax error at or near "WHERE" 
+1

我相信你有一個理由,但這似乎是一件奇怪的事情。出於好奇,你希望通過這樣做來實現什麼? – That1Guy

回答

3
INSERT INTO foo 
SELECT -- here is empty select, without any columns 
WHERE random() >= 0.5; 

Demo

PS:有幾個 「好奇」 在PostgreSQL的相關的東西。例如,select;或甚至更多create table t();都是有效的語句。

0

條件插入需要查詢,你可以從INSERT documentation見,queryDEFAULT 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;