PostgreSQL에서 새 테이블을 만들고 id
열에 새 시퀀스를 할당했습니다. PostgreSQL 콘솔에서 레코드를 삽입하면 작동하지만 레일스에서 레코드를 가져 오려고하면 관련된 시퀀스를 찾을 수 없다는 예외가 발생합니다. 여기 새로 할당 된 시퀀스가 작동하지 않습니다.
\d+ user_messages;
Table "public.user_messages"
Column | Type | Modifiers | Storage | Description
-------------+-----------------------------+------------------------------------------------------------+----------+-------------
id | integer | not null default nextval('new_user_messages_id'::regclass) | plain |
하지만, 사용 레일 SQL 쿼리와 순서를 얻을 때 NULL을 반환
이 오류는 레일에 의해 제기되고select pg_catalog.pg_get_serial_sequence('user_messages', 'id');
pg_get_serial_sequence
------------------------
(1 row)
입니다 :
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를 통해 저장됩니다.
어떻게 수정합니까?
감사합니다. 나는이 정확한 문제를보고 있고,'pg_get_serial_sequence'는'NULL'을 리턴하고 있습니다. 이상한 일은 내 dev 머신에서, 이것처럼 잘 작동하지만, 서버를 빌드 할 때 예외가 발생합니다. 어떤 아이디어? –
@JimStewart :'serial' 열을 사용하고 있습니까? 아니면 시퀀스를 손으로 연결하려고합니까? –
나는 문제의 근원이 시퀀스가 고립되어 생성되었다는 것을 알아 냈고 우리의 테이블은'id sequence' (긴 이야기)보다는'id integer'로 만들어졌다. 이 기능이 Rails 3.1에서 잘려나 간 이유는 ActiveRecord의 이전 버전이 DB 쿼리를 시도 할 것이고, 실패 할 경우 기본'tablename_columname_seq'가 작동한다는 가정하에 다시 돌아가는 것입니다. 이제 ActiveRecord는 더 이상 아무 것도 사용하지 않으므로 매핑이 있어야합니다. 자세한 솔루션을 가져 주셔서 감사합니다! DB를 수정하기 위해'alter sequence'를 사용하고 있습니다. –