在 postgres 中我有两个这样的表
CREATE TABLE foo (
pkey SERIAL PRIMARY KEY,
name TEXT
);
CREATE TABLE bar (
pkey SERIAL PRIMARY KEY,
foo_fk INTEGER REFERENCES foo(pkey) NOT NULL,
other TEXT
);
我想做的是编写一个执行以下操作的 .sql 脚本文件
INSERT INTO foo(name) VALUES ('A') RETURNING pkey AS abc;
INSERT INTO bar(foo_fk,other) VALUES
(abc, 'other1'),
(abc, 'other2'),
(abc, 'other3');
在 pgAdmin 中产生以下错误
Query result with 1 row discarded.
ERROR: column "abc" does not exist
LINE 3: (abc, 'other1'),
********** Error **********
ERROR: column "abc" does not exist
SQL state: 42703
Character: 122
在存储过程之外如何定义一个我可以在语句之间使用的变量?是否有一些其他语法能够使用从插入到 foo 返回的 pkey 插入到 bar 中。
最佳答案
您可以将查询合并为一个。像这样的东西:
with foo_ins as (INSERT INTO foo(name)
VALUES ('A')
RETURNING pkey AS foo_id)
INSERT INTO bar(foo_fk,other)
SELECT foo_id, 'other1' FROM foo_ins
UNION ALL
SELECT foo_id, 'other2' FROM foo_ins
UNION ALL
SELECT foo_id, 'other3' FROM foo_ins;
其他选项 - 使用匿名 PL/pgSQL block ,如:
DO $$
DECLARE foo_id INTEGER;
BEGIN
INSERT INTO foo(name)
VALUES ('A')
RETURNING pkey INTO foo_id;
INSERT INTO bar(foo_fk,other)
VALUES (foo_id, 'other1'),
(foo_id, 'other2'),
(foo_id, 'other3');
END$$;
关于sql - 如何从 .sql 脚本文件中获取 postgres 中自动递增列的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19337663/