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