【问题标题】:How to insert data with specific ID into Postgres using Sequel如何使用 Sequel 将具有特定 ID 的数据插入 Postgres
【发布时间】:2017-04-20 09:00:40
【问题描述】:

我正在使用 Sequel gem 填充 Postgres 数据库。但是,数据是从另一个数据库中提取的,并且已经包含一个 ID。我只提取了这些 ID 的一小部分,它们是完全随机的,所以它们非常乱。

是否可以将项目插入我的数据库并提供特定 ID 以用作主键,或者这是一个坏主意?我尝试手动提供 ID 并得到“id 是受限制的主键”。

【问题讨论】:

  • 欢迎来到 SO。请阅读“How to Ask”和“minimal reproducible example”。如果您提供有关您正在做什么以及如何做的更多详细信息,它将在未来对其他人有所帮助。演示问题的最少代码很有帮助;代码就像一张图片,值一万字。

标签: ruby database postgresql sequel


【解决方案1】:

不能插入id,因为数据库和Sequel想把主索引值定义为序号。

您可以使用 Hash 的 delete 方法从哈希中删除 :id

foo = {id: 1, bar: 2}
foo.delete(:id) # => 1
foo # => {:bar=>2}

然后使用insert

如果您绝对必须重用这些 ID,那么您可以按主 ID 对数据进行排序,然后遍历记录,为间隙插入虚拟记录,然后插入真实数据,从而允许 DBM仍然使用下一个序列号。但这确实与我们使用数据库的方式背道而驰。

【讨论】:

  • 很公平 - 我决定将现有 ID 存储为“originalID”,这样可以。谢谢!
  • 我不建议对字段使用驼峰命名法。坚持使用snake_case,一旦你使用Sequel 的模型,它就会很好地工作。 (你应该这样做,因为它们非常强大。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-24
  • 2012-08-21
  • 1970-01-01
  • 2020-09-03
  • 2017-07-02
  • 2019-03-23
  • 2012-02-03
相关资源
最近更新 更多