PostgreSQL:条件插入默认值

时间:2017-07-14 16:54:26

标签: postgresql sql-insert auto-increment

我们如何有条件地将具有默认值的行插入表中?

例如,我们有一个包含一列的表。

CREATE TABLE foo (
    id bigserial PRIMARY KEY
);

而且,我们想做类似下面的事情:

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

但是,我们得到:

ERROR:  syntax error at or near "WHERE"

2 个答案:

答案 0 :(得分:3)

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

Demo

PS:有几个好奇的" PostgreSQL中的相关内容。例如,select;或更多create table t();都是有效的陈述。

答案 1 :(得分: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;