为postgres初始设置脚本设置变量



我已经创建了以下设置脚本。脚本应该在部署应用程序(将在节点上运行(之前运行。其想法是,它最终将包含所有表定义、关系、存储过程和一些种子数据,以使应用程序能够工作,并拆分为不同的文件。但目前我陷入了困境,因为我不知道如何将数据存储在变量中。在这个例子中,我们有概要文件(因为user是一个关键字(和清单。我希望每个用户都有一个库存。为了实现这一点,我需要生成一个清单,将其id存储在一个变量中,并将其传递给配置文件
但由于某些原因,postgres不允许我声明变量。到目前为止我得到的是:

drop database test;
create database test;
c test
create extension if not exists "uuid-ossp";    
create table inventory(
id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
name text
);
create table profile(
id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
name text,
inventory_id uuid references inventory(id)
);
DECLARE myid uuid;
/*I want to set the inv_id to the result of this expression*/
insert into inventory(name) values('asdf') returning id into myid;

insert into profile(name,inventory_id) values ('user1',@myid)

但我得到以下错误:

$ psql -U postgres -f init.sql    
psql:init.sql:18: ERROR:  syntax error at or near "uuid"
LINE 1: DECLARE myid uuid;
^

那么,我如何创建一个变量来存储这个id呢?我是不是做错了什么,因为我很确定Declare是SQL规范的一部分。

您可以使用

WITH myids AS (
INSERT INTO inventory(name)
VALUES ('asdf')
RETURNING id
)
INSERT INTO profile(name,inventory_id)
SELECT 'user1', id
FROM myids;

最新更新