数据库:从多个服务器插入

时间:2014-07-22 09:01:14

标签: database postgresql

Rally DB新手问题:

我正在尝试将用户记录插入数据库。 id类型可以是自动递增序列,也可以是INT。

如何插入具有唯一ID的记录,我可以返回该ID,确保如果请求由多个应用程序服务器处理,那么我不会生成重复的ID。

e.g。

  • 服务器1需要插入:('John','Smith',25)
  • 服务器2需要插入:('John','Rambo',25)

应用服务器需要返回生成记录的ID。我无法根据属性进行选择,因为

  1. 他们可能重复
  2. 很贵。
  3. 一个解决方案是每个应用服务器还插入服务器ID,服务器更新号,组合,然后根据它进行选择。

    我觉得这应该是一个普遍的问题,有一个更简单的解决方案。

    如果重要的话,我正在使用PostgreSQL。

2 个答案:

答案 0 :(得分:3)

使用postgres,您可以使用RETURNING子句返回列的值,例如

INSERT INTO表(col1,col2,col3)VALUES(1,2,3)RETURNING id;

答案 1 :(得分:2)

您没有提及您正在使用的语言和工具。这很重要,因为标准并没有真正涵盖这一点,但许多客户端平台都有自己的抽象。

特别是JDBC有Statement.getGeneratedKeys()Statement.RETURN_GENERATED_KEYS

我认为在ODBC界面中没有任何等效内容。我没有找到一个快速搜索,但发现一些供应商将其添加为扩展名。

对于其他客户,它只取决于您使用的是什么。一些ORM层具有它们自己的处理,例如, Hibernate(以及其他JPA实现)处理密钥生成,ActiveRecord(blech),SQLAlchemy等也是如此。

否则,正如Lucas所说,你可以使用PostgreSQL扩展RETURNING the_key_column_names_here。 (9.5应该有希望增加RETURNING PRIMARY KEY)。

(SQL规范提供GENERATED ALWAYS但据我所知,没有标准方法可以返回值。许多数据库无论如何都不会实现GENERATED。)