使用uuids生成sql文件并进一步引用这些id postgres9.5

时间:2016-11-18 17:23:50

标签: sql postgresql

我正在创建一个以uuids为主键的sql文件。以下是我的创建表定义如何使用pgcrypto扩展

CREATE EXTENSION pgcrypto;  
CREATE TABLE snw.contacts(  
   id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
   name TEXT,
   email TEXT
);

现在我使用

在此表中添加记录
INSERT INTO snw.contacts (name,email) VALUES('Dr Nic Williams','drnic');

postgres=# select * from snw.contacts;
                  id                  |      name       | email
--------------------------------------+-----------------+-------
 7c627ee0-ac94-40ee-b39d-071299a55c13 | Dr Nic Williams | drnic

现在在同一个文件中继续我要在一个看起来像

的表中插入一行
CREATE TABLE snw.address(  
   id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
   street TEXT
   contact UUID
);

其中,联系人UUID是指snw.contacts表中的ID。如何获取在第一个插入中生成的uuid并在snw.address表中的另一个插入中使用它?类似于:

INSERT INTO snw.address(street,contact) values('ABC', (select id from snw.contacts where email='drnic'));

我可以使用where子句我使用此脚本生成一些测试数据,因此我知道该电子邮件将用于获取ID。

1 个答案:

答案 0 :(得分:1)

使用data modifying CTE:

with new_contact as (
  INSERT INTO snw.contacts (name,email) 
  VALUES('Dr Nic Williams','drnic')
  returning id
)
INSERT INTO snw.address(street,contact)
select 'ABC', id
from new_contact;