我希望,简单的问题,我遗憾地找不到通过谷歌搜索或RTFMing的答案。
我想创建一个默认值的列,该默认值基于另一个表的第一个id。
这样的东西,遗憾地给了我“错误:不能在默认表达式中使用子查询”
ALTER TABLE foobar
ADD COLUMN foo INTEGER DEFAULT (SELECT id FROM blubb LIMIT 1);
问题是,我不能简单地假设'blubb'从0或1开始,我想稍后将CONSTRAINT放在上面。
答案 0 :(得分:5)
简单回答:使用函数。
示例:
CREATE TABLE foo (id serial primary key);
CREATE OR REPLACE FUNCTION max_foo() RETURNS int LANGUAGE SQL AS
$$ SELECT max(id) FROM foo; $$;
CREATE TABLE bar(id int not null default max_foo());