Database 数据库:从多台服务器插入

Database 数据库:从多台服务器插入,database,postgresql,Database,Postgresql,Rally DB新手问题: 我正在尝试将用户记录插入数据库。id类型可以是自动递增序列或INT 我如何插入一个ID唯一的记录,并且我可以取回该ID,确保如果请求由多个应用程序服务器处理,那么我不会生成重复的ID e、 g 服务器1需要插入:('John','Smith',25) 服务器2需要插入:('John','Rambo',25) 应用服务器希望返回生成记录的id。我无法基于属性进行选择,因为 它们可能是重复的 很贵 一种解决方案是,每个应用服务器还插入一个服务器id、服务器更新号和组合

Rally DB新手问题:

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

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

e、 g

  • 服务器1需要插入:('John','Smith',25)
  • 服务器2需要插入:('John','Rambo',25)
应用服务器希望返回生成记录的id。我无法基于属性进行选择,因为

  • 它们可能是重复的
  • 很贵
  • 一种解决方案是,每个应用服务器还插入一个服务器id、服务器更新号和组合,然后在此基础上进行选择

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


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

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


    在返回id的表(col1,col2,col3)中插入值(1,2,3)

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


    在返回id的表(col1,col2,col3)中插入值(1,2,3)

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

    特别是JDBC有
    语句.getGeneratedKeys()
    语句.RETURN\u GENERATED\u KEYS

    我认为ODBC接口中没有任何等价物。我没有找到一个具有快速搜索功能的,但发现一些供应商将其添加为扩展

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

    否则,正如Lucas所说,您可以使用PostgreSQL扩展名
    在这里返回\u key\u column\u names\u
    。(9.5应该希望添加
    返回主键


    (SQL规范提供了
    始终生成的
    ,但据我所知,没有标准的方法返回值。许多数据库都没有实现
    生成的

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

    特别是JDBC有
    语句.getGeneratedKeys()
    语句.RETURN\u GENERATED\u KEYS

    我认为ODBC接口中没有任何等价物。我没有找到一个具有快速搜索功能的,但发现一些供应商将其添加为扩展

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

    否则,正如Lucas所说,您可以使用PostgreSQL扩展名
    在这里返回\u key\u column\u names\u
    。(9.5应该希望添加
    返回主键


    (SQL规范提供了
    始终生成的
    ,但据我所知,没有返回值的标准方法。许多数据库无论如何都不实现
    生成的

    这不是SQL标准的一部分,但很容易知道您是否在使用postgres;)再次感谢!我本打算将此标记为答案,但希望稍等片刻,以防有人有更“标准”的答案。这不是SQL标准的一部分,但可以方便地知道您是否正在使用postgres;)再次感谢!我本来打算把这个标记为答案,但我想等一下,以防有人有一个更“标准”的答案。哈,如果一个常见的通用问题意味着SQL中有一个标准解决方案的话<代码>限制
    偏移
    。或者是上游问题。哈,如果一个普通的通用问题意味着SQL中有一个标准的解决方案的话<代码>限制
    偏移
    。或者是上游问题,我使用的是Scala+ORM+JDBC+Postgre。Lucas的解决方案在psql命令行中工作,尚未检查它是否在我的项目中工作。@user247077如果您使用的是PgJDBC,请使用JDBC标准方法和
    getGeneratedKeys
    。如果你的ORM真的没有为你做这件事,我会很惊讶。哪个ORM?我用的是Scala+ORM+JDBC+Postgre。Lucas的解决方案在psql命令行中工作,尚未检查它是否在我的项目中工作。@user247077如果您使用的是PgJDBC,请使用JDBC标准方法和
    getGeneratedKeys
    。如果你的ORM真的没有为你做这件事,我会很惊讶。哪个ORM?