- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 pg
gem 将数据直接加载到数据库的模型。它通过动态创建 CSV 文件并通过调用将值分配给 id
字段来实现:
self.class.select("nextval('apps_id_seq'::regclass)").first['nextval']
在 to_csv
实例方法中。
这在生产中效果很好。但是,我正在填写一些测试,如果这个测试首先运行,或者它自己运行,它会失败,因为数据库刚刚被 Database Cleaner
gem 和序列重置被重置。但它们没有给出起始值。
Postgres 文档说您可以对有问题的序列调用 setval
来设置它。假设我想将它设置为从 1 开始,以便下次调用 nextval
时,它将返回 1:
select setval('apps_id_seq'::regclass, 1, false);
但我不能像上面调用 nextval
那样调用它,因为它根本不起作用。它返回 nil,并且不设置序列。
我尝试的任何事情都没有迭代:
self.class.select("setval('apps_id_seq'::regclass)").first
App.connection.execute("select setval('apps_id_seq'::regclass,1,false)")
ActiveRecord::Base.connection.execute("select setval('apps_id_seq'::regclass,1)")
ActiveRecord::Base.connection.execute("select setval('apps_id_seq'::regclass,1,false)")
ActiveRecord::Base.connection.execute("select setval('apps_id_seq'::regclass,1,false)")
它们的任何组合都不起作用,它只是拒绝
起作用。不知道是不是pg
gem 的问题。
更新
这些语句在开发
模式下工作:
App.select("setval('apps_id_seq'::regclass,1)").first
和:
App.select("nextval('apps_id_seq'::regclass)").first
然而,它们都不能在 test
中工作。
但是,这些语句在 test
模式下确实有效:
ActiveRecord::Base.connection.execute("select setval('apps_id_seq'::regclass,1,false)").first
和:
ActiveRecord::Base.connection.execute("select nextval('apps_id_seq'::regclass)").first
据我所知,这两种环境的唯一区别是一个有数据,而另一个没有。我的测试数据库是使用 structure.sql
文件中的 rake db:test:prepare
创建的。
最佳答案
setval
和 nextval
将起作用,无论表中是否有序列所附加的数据。甚至可以在不关联到现有表的列的情况下创建和递增序列。当您使用 Model.select
执行原始 SQL 时,ActiveRecord 会为您正在使用的模型的表生成带有 from 子句的 SQL:
> App.select("setval('apps_id_seq'::regclass,1)").first
SELECT nextval('apps_id_seq'::regclass)
FROM "apps" ORDER BY "apps"."id" ASC LIMIT 1'
=> nil
因为 apps 表中没有记录,所以永远不会执行 setval 函数。这就是为什么在直接使用连接时相同的 select 起作用的原因,因为 select 没有无关的 from 子句:
> ActiveRecord::Base.connection.execute("SELECT setval('apps_id_seq'::regclass, 1)").first
SELECT setval('apps_id_seq'::regclass, 1)
=> {"setval"=>"1"}
使用这种形式执行 SQL 以确保始终对 setval
函数求值。
关于ruby-on-rails-3 - 序列 "setval"操作与 Postgres in Rails 3.2.16 的 "nextval"不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21146760/
我都试过了: SET client_min_messages TO WARNING; 还有我运行时的 -q 选项: psql -q -U postgres -d myDB -f /Users/hoap
有人知道 pg_catalog.setval 的作用吗? 我刚刚转储了一个 PostgreSQL 数据库,并在其中得到了很多行。不确定它的用途。 最佳答案 您可能需要检查 fine manual :
我想在 PostgreSQL 中将一个序列递增一些 batchSize,但我不确定这个查询对于对同一序列的并发调用是否安全。 select setval('my_sequence', nextval(
如何执行 PostgreSQL 的 sequence manipulation functions ,例如通过 Hibernate 的 setVal()?例如: SELECT setval('lice
将序列的值设置为一个值 这两个命令相同,结果相同 SELECT setval('lcm.samplings_id_seq', 1, false); ALTER SEQUENCE lcm.samplin
如果您尝试像这样设置序列号: SELECT setval('table_ID_seq', (SELECT max("ID") + 1 FROM table)); 您可能会遇到以下错误: ERROR:
我有一个使用 pg gem 将数据直接加载到数据库的模型。它通过动态创建 CSV 文件并通过调用将值分配给 id 字段来实现: self.class.select("nextval('apps_id_
我是一名优秀的程序员,十分优秀!