Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何在另一个表的Postregsql实体表中插入自动生成的id';身份证_Database_Postgresql - Fatal编程技术网

Database 如何在另一个表的Postregsql实体表中插入自动生成的id';身份证

Database 如何在另一个表的Postregsql实体表中插入自动生成的id';身份证,database,postgresql,Database,Postgresql,我有一个实体表,我想从中自动生成数据,以便在其他表中用作FK。生成的Id将成为其他表中的PK 我的桌子 用户带有用户Id(PK)和其他列(如名字、姓氏、电子邮件、密码等)的表 条目表是具有一个条目Id(PK)列的实体表 文章表将使用上面条目表中自动生成的条目Id作为主键,并与标题、作者、类别、创建日期等其他列一起使用 Photo表将使用上面条目表中自动生成的条目Id作为主键,与其他列(如标题、图像URL、作者(FK)、创建日期)一起使用 Comment表将使用Comment_Id作为主键,上面e

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

我的桌子 用户带有用户Id(PK)和其他列(如名字、姓氏、电子邮件、密码等)的表

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

文章表将使用上面条目表中自动生成的条目Id作为主键,并与标题、作者、类别、创建日期等其他列一起使用

Photo表将使用上面条目表中自动生成的条目Id作为主键,与其他列(如标题、图像URL、作者(FK)、创建日期)一起使用

Comment表将使用Comment_Id作为主键,上面entry表中自动生成的条目_Id作为FK,以形成复合键。其他列包括用户Id作为FK fromUsers表、注释、创建日期

Flag表将使用Flag_Id作为主键,将上面entry表中自动生成的条目_Id作为FK,以形成复合键。其他列包括用户表中作为FK的用户Id、标志类型

我想做什么 我希望我的查询在有人提交表单时自动生成条目的条目Id,并在其他表中自动使用生成的Id,如文章照片评论标志

当我硬编码这些值时,ArticlePhoto表为多行接受一个条目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

将第一个插入放入CTE返回id中,并在第二个插入中使用该CTE.id。@wildplasser谢谢。让我来研究一下,我想你是在试图用条目表把文章、作者的照片和评论等项目放在一起。如果是这样,它就失败了,至少正如我们所描述的那样。例如,您说“在上面的条目表中,自动生成的条目Id为FK。”但FK是什么?一篇文章(或者照片),但是你不需要一个新的自动生成的值,而需要一个文章(照片)的旧值。实际上,条目表是混乱和复杂的根源。摆脱它。然后重新检查表之间的关系。您可以根据业务规则而不是DB规则来重新发布问题,以获得响应。在我的例子中,我的entity表中只有entry_Id,因此当用户从say Article表提交表单时,我只想在entity表中生成entry_Id作为主键,并将其用作Article表中的主键。如果我不想返回文本值,是否需要在foo(text)值(“text”)中插入
行?@jetrolowlole:您问题中的标识符不一致。这是你自己造成的混乱。现在清理一下。@jetroowole:是的,您需要
returning
子句将插入
entity
时生成的
entity\u id
传输到
article
表中。例如:
将实体_行作为(insert into foo values()返回实体_id)插入文章(实体_id,title)从实体_行选择实体_id,“mytitle”
@GMB感谢您的回复。查询不起作用,因为行
(insert into foo values()
返回了“()”的语法错误。似乎需要提供一个值。