- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 PostgreSQL 中,我创建了一个新表并将新序列分配给 id
列。如果我从 PostgreSQL 控制台插入一条记录,它可以工作,但是当我尝试从 Rails 导入一条记录时,它会引发一个异常,它无法找到关联的序列。
这是表格:
\d+ user_messages;
Table "public.user_messages"
Column | Type | Modifiers | Storage | Description
-------------+-----------------------------+------------------------------------------------------------+----------+-------------
id | integer | not null default nextval('new_user_messages_id'::regclass) | plain |
但是当我尝试使用 Rails 使用的 SQL 查询获取序列时,它返回 NULL:
select pg_catalog.pg_get_serial_sequence('user_messages', 'id');
pg_get_serial_sequence
------------------------
(1 row)
Rails 引发的错误是:
UserMessage.import [UserMessage.new]
NoMethodError: undefined method `split' for nil:NilClass
from /app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:910:in `default_sequence_name'
此问题仅在我使用 ActiveRecord 扩展导入批量记录时出现,单个记录通过 ActiveRecord 保存。
我该如何解决?
最佳答案
我认为您的问题是您手动设置了所有这些,而不是使用 serial
列。当您使用 serial
列时,PostgreSQL 将创建序列,设置适当的默认值,并确保序列由相关表和列拥有。来自fine manual :
pg_get_serial_sequence(table_name, column_name)
get name of the sequence that a serial or bigserial column uses
但是你没有使用 serial
或 bigserial
所以 pg_get_serial_sequence
没有帮助。
您可以通过以下方式解决此问题:
alter sequence new_user_messages_id owned by user_messages.id
我不确定这是否是一个完整的解决方案,有人(嗨 Erwin)可能会填补缺失的部分。
使用 serial
可以省去一些麻烦。作为 id
列的数据类型。这将为您创建并连接序列。
例如:
=> create sequence seq_test_id;
=> create table seq_test (id integer not null default nextval('seq_test_id'::regclass));
=> select pg_catalog.pg_get_serial_sequence('seq_test','id');
pg_get_serial_sequence
------------------------
(1 row)
=> alter sequence seq_test_id owned by seq_test.id;
=> select pg_catalog.pg_get_serial_sequence('seq_test','id');
pg_get_serial_sequence
------------------------
public.seq_test_id
(1 row)
关于ruby-on-rails - 新分配的序列不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10546850/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!