Ruby DataMapper를 사용하여 액세스하려는 기존 PostgreSQL 데이터베이스가 있습니다. 기존 데이터베이스 스키마에 따라 모델을 만들었지 만 기본 키는 자동으로 증가하지 않습니다.레거시 PostgreSQL 데이터베이스와 함께 DataMapper를 사용하는 자동 증가 키
내 모델은 다음과 같이 다음 id
Serial
로 정의
class Company
include DataMapper::Resource
property :id, Serial
property :name, String
end
효과가 없습니다 : 나는 인스턴스를 만들 때 나는 때문에 위반-NOT NULL 제약의 DataObjects::IntegrityError
를 얻을.
데이터베이스가 PHP/Doctrine 응용 프로그램과 공유되므로 스키마를 변경할 수 없습니다. PHP 애플리케이션은 다음과 같이 기본 키를 만들 시퀀스를 사용
SELECT NEXTVAL('"production"."sequence_id_seq"')
INSERT INTO "production"."companies" ("name", "id") VALUES ('Acme Inc.', 40711)
표는 다음과 같습니다
CREATE TABLE production.companies
(
id bigint NOT NULL,
"name" character varying(255) NOT NULL,
CONSTRAINT companies_pkey PRIMARY KEY (id),
)
WITH (
OIDS=FALSE
);
이 동등한 교리 스키마 정의입니다 :
CompanyOrm:
tableName: companies
columns:
id:
type: integer(8)
unsigned: 1
primary: true
sequence: sequence_id
name:
type: string(255)
notnull: true
방법 DataMapper를 사용하여 해당 동작을 다시 만들 수 있습니까? 또는이 상황에서 자동 증가 키를 만드는 다른 (더 나은) 솔루션이 있습니까? 그것은을 일으킬 가능성이 있는지 여부를 말할
INSERT INTO "production"."companies" ("name", "id")
VALUES ('Acme Inc.', nextval('production.sequence_id_seq'))
내가 DataMapper에 대해 충분히 알고하지 않습니다