相关疑难解决方法(0)

我可以在另一个INSERT中使用INSERT ... RETURNING的返回值吗?

这样的事情可能吗?

INSERT INTO Table2 (val)
VALUES ((INSERT INTO Table1 (name) VALUES ('a_title') RETURNING id));
Run Code Online (Sandbox Code Playgroud)

比如使用返回值作为值来在第二个表中插入一行并引用第一个表?

postgresql sql-returning

67
推荐指数
5
解决办法
8万
查看次数

SQL - 插入行并返回主键

我有点诙谐的问题.比如说,我在一个存在主键的表中插入了一些包含一些数据的行.如何"选择"刚刚插入的行的主键?

我应该更具体,并提到我目前正在使用SQLite.

sql sqlite row insert primary-key

28
推荐指数
4
解决办法
7万
查看次数

PHP,Postgres帮助使用RETURNING

我想我理解PostgreSQL和RETURNING是如何工作的 - 我发现了许多很多资源.如果我抓住它,它会看起来像

"INSERT INTO table (column2, column3) VALUES ('value1', 'value2') RETURNING id;"
Run Code Online (Sandbox Code Playgroud)

但是,我找不到任何可以帮助我通过PHP访问它的东西.当我以为我想出来的时候,我试过了

$new_id = pg_query($dbc, "INSERT INTO table (column2, column3) ".
"VALUES ('value1', 'value2') RETURNING id;");
return $new_id;
Run Code Online (Sandbox Code Playgroud)

但它返回NULL.我还尝试用一个查询分别执行和声明变量.在寻找解决方案的几个小时后,我已经确定了一个max(id)SELECT语句/函数,但它仍然困扰着我.任何帮助是极大的赞赏.

我正在使用Postgres 8.4和PHP 5.3.

php postgresql sql-returning

8
推荐指数
1
解决办法
1万
查看次数

如何在Liquibase中执行第二次插入时引用自动递增的id?

我目前正在玩Liquibase并为用户创建了一个表,并为角色创建了一个表.每个用户都有一个唯一的id,当插入用户时,该ID是自动生成的(通过自动增量序列).然后,角色表中的角色将引用此ID.

现在我尝试使用Liquibase插入默认用户.首先我插入用户,然后我想插入一个引用这个新创建的用户的角色.

问题是我无法在Liquibase中找到一种方法来检索为新用户生成的id,以便在插入新角色时可以使用它.

这可能吗?如果是,应该怎么做?

想要做以下事情:

<insert tableName="xxx_user">
    <!-- Id is auto incremented -->
    <column name="user_name" value="XXX" />
    <column name="password" value="XXX" />
    <column name="first_name" value="XXX" />
    <column name="last_name" value="XXX" />
</insert>

<insert tableName="user_role">
    <column name="user_id" value="<point at the auto generated id in previous insert>" />
    <column name="role" value="A_ROLE" />
</insert>
Run Code Online (Sandbox Code Playgroud)

sql database postgresql liquibase

6
推荐指数
1
解决办法
1598
查看次数

Postgresql INSERT - 自动获取下一个ID?

我正在使用 IntelliJ 和数据库工具。我对一些数据有疑问,所以我删除了一行,但后来想添加更多......

我使用了克隆选项:

在此输入图像描述

然后我修改了我的值并点击了commit按钮。

但是,插入失败并出现错误:

错误:重复的键值违反了唯一约束“主键 some_table”详细信息:键(id)=(58)已存在。

然后我尝试通过控制台并手动插入,但出现相同的错误。每次我执行此操作时,id 都会递增...我有数千条记录,因此我无法继续单击,直到我的手指折断。

如下所示id(创建表时):

id bigserial not null constraint "Primary Key some_table"
primary key
Run Code Online (Sandbox Code Playgroud)

当我尝试修改表时,我看到 id 的默认值设置如下:

nextval('some_table_id_seq'::regclass)
Run Code Online (Sandbox Code Playgroud)

我试过了:

INSERT INTO some_table (id,...columns..) VALUES (DEFAULT,...columns...);
Run Code Online (Sandbox Code Playgroud)

INSERT INTO some_table (...columns..) VALUES (...columns...);
Run Code Online (Sandbox Code Playgroud)

但我得到同样的错误...

我意识到我可以做一些事情,比如运行查询来获取 MAX id然后进行插入,但这对我来说似乎有点荒谬。

如何定制我的INSERT以便它自动获取新的/下一个id

例如,MSSQL 已使用newid().

postgresql intellij-idea

4
推荐指数
1
解决办法
1万
查看次数

如何根据 Postgres 中的 INSERT RETURNING id 执行 SQL 更新?

我正在使用 Postgres。我有一张旧桌子和一张新桌子。旧表中的记录需要有新表中的相关记录。新表记录将有效地充当新表中记录的父项。

我正在尝试编写一个迁移,其中旧表中的每个“子”在新表中都有“父”。

OLD TABLE(我添加了一个外键,希望在迁移过程中填充它)

 id | name | new_id (FK)
----+------+-------------
  1 | 1st  | 
  2 | 2nd  |
Run Code Online (Sandbox Code Playgroud)

新表

 id | name 
----+------
    |
Run Code Online (Sandbox Code Playgroud)

我需要执行以下操作:

  • SELECT 旧表中的所有记录
  • INSERT 每个旧记录的新表中的记录和 RETURNING id
  • UPDATE 旧记录的外键值 RETURNING id

有没有办法使用集合查询来完成此操作?或者我是否需要开始深入研究 Postgres 特定的东西,比如LOOPs?

sql migration postgresql database-migration

4
推荐指数
1
解决办法
3288
查看次数

如何在SQL函数中获取INSERT的返回值并在同一函数中使用它?

这是一个完成标题的例子,这是我的函数的内部(我使用postgresql,但我想这是纯SQL语言)

$$
  INSERT INTO foo VALUES (DEFAULT, $1) RETURNING id;
  INSERT INTO link_foo_to_bar VALUES (1, <?>);
$$ language SQL;
Run Code Online (Sandbox Code Playgroud)

这里要注意两件事,我返回第一个插入的id,如何捕获它以使用返回的id作为第二个插入的第二个参数标记为<?>

sql postgresql function

0
推荐指数
1
解决办法
91
查看次数

插入一行后如何获取序列号?

我有一个表,其行“id”(主键)默认设置为 PostgreSQL 中的串行。我通过调用插入到这一行

session.getCurrentSession().createSQLQuery("some insert query") 
Run Code Online (Sandbox Code Playgroud)

没有在 id 中添加任何值,因为它默认设置为串行。

如何检索刚刚插入的行的“id”?

java postgresql hibernate

-1
推荐指数
1
解决办法
7702
查看次数