Postgresql 设置postgres初始设置脚本的变量

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

我已经创建了以下安装脚本。脚本将在部署应用程序(将在节点上运行)之前运行。 其思想是,它最终将包含所有表定义、关系、存储过程和一些种子数据,以使应用程序能够工作,并拆分为不同的文件。 但目前我陷入困境,因为我不知道如何将数据存储在变量中。 在本例中,我们有配置文件(因为用户是关键字)和库存。我希望每个用户都有一个清单。为此,我需要生成一个库存,将其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;

Declare是SQL规范的一部分。
是的,但它的含义与您认为的不同。谢谢,这非常有效。但是由于MyID可以包含多个记录,有没有一个技巧可以让我使用它一次创建多个具有关联库存的配置文件?您可以使用
一次插入多个值,并且可以在select子句中执行任意的
连接
。如果您的库存名称是唯一的,那么将它们关联起来就很简单了,否则您将不得不使用
行号
订单的一些技巧。谢谢,我会找到答案的