繁体   English   中英

如何在另一个表的 ID 中的 Postregsql 实体表中插入自动生成的 ID

[英]How to insert an auto-generated id in a Postregsql entity table in another table's ID

我有一个实体表,我想从中自动生成数据以在其他表中用作 FK。 生成的 Id 将成为其他表中的 PK。

我的桌子

带有user_Id (PK) 的用户表,以及其他列,例如firstnamelastnameemailpassword等。

条目表是具有一个entry_Id (PK) 列的实体表。

Article表将使用上面Entry表中自动生成的entry_Id作为 PK 与其他列,例如titleauthorIdcategorycreated_Date

照片表将使用上面Entry表中自动生成的entry_Id作为 PK 与其他列,如titleimageurlauthorId (FK)、 created_Date

评论表将使用comment_Id作为PK,将上面Entry表中自动生成的entry_Id作为FK,形成一个复合键。 其他列包括来自Users表的user_Id作为 FK、 commentcreated_Date

Flag表会使用flag_Id作为 PK,上面的Entry表中自动生成的entry_Id作为 FK,形成一个复合键。 其他列包括来自用户flag_typeuser_Id作为 FK。

我想做的事

我希望我的查询在有人提交表单时自动生成entry_Id并在其他(例如ArticlePhotoCommentFlag )中自动使用生成的 id 。

当我对这些值进行硬编码时, ArticlePhoto表接受一个entry_Id用于多行。

我看到了这样的东西,但我不确定这是否是我想要的。

START TRANSACTION;
INSERT INTO foo (auto,text)
    VALUES(NULL,'text');       
INSERT INTO foo2 (id,text)
    VALUES(LAST_INSERT_ID(),'text'); 
COMMIT TRANSACTION;

是否有一个脚本可用于使我的实体表中的自动生成的 id 可在其他表中重复使用?

正如 wildplasser 所评论的,自 9.1 版以来,Postgres 有一个很好的功能,它结合了 cte 和returning关键字,它允许你做你想做的事。

这是基于您的伪代码的示例:

with foo_row as (insert into foo (text) values ('text') returning foo_id)
insert into foo2 (foo_id) select foo_id from foo_row

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM