짧은 대답은 knex.raw
대신 knex.schema.raw
을 사용하는 것입니다.
아래의 원시는 나를 위해 일했습니다. SQLite로 테스트하는 동안 SQLite Syntax 오류가 발생하기 때문에 SQL의 축약 된 버전을 만들었습니다. 또한 .on('query-error',
...을 사용하면 SQL 엔진 오류를 반환하는 데 유용합니다.
let rawCreate = 'CREATE TABLE session ('+
'sid varchar NOT NULL, sess json NOT NULL, '+
'expire timestamp(6) NOT NULL);';
let rawCreateOriginal = 'CREATE TABLE session ('+
'sid varchar NOT NULL COLLATE "default", sess json NOT NULL, '+
'expire timestamp(6) NOT NULL) WITH (OIDS=FALSE);';
let rawAlter = 'ALTER TABLE "session" ADD KEY "sid" NOT DEFERRABLE INITIALLY IMMEDIATE;';
let rawAlterOriginal = 'ALTER TABLE "session" ADD CONSTRAINT "session_pkey" PRIMARY KEY ("sid") NOT DEFERRABLE INITIALLY IMMEDIATE;';
return knex.schema.hasTable('session')
.then(function(exists) {
if (!exists) {
return knex.schema.raw(rawCreate)
.on('query-error', function(ex, obj) {
console.log("DA.INIT81 query-error ex:", ex, "obj:", obj);
}).then(function() {
console.log("DA.INIT01 Created table session.");
}).then(function() {
return knex.schema.raw(rawAlter)
}).then(function() {
console.log("DA.INIT02 Altered table session.");
});
}
})
.catch((ex) => {
console.error("DA.INIT88 Create or Alter table session is broken. ex:",ex);
});
희망이 있습니다. 게리.
감사합니다. 이것은 분명히 나를 도왔다. 이 코드를 실행하려고하면 세션 테이블이 만들어졌지만 "sid"유형이 잘못되었습니다. – PowerLove
Ahnvm, 알겠습니다. postgresql을 잊어 버리면 PRIMARY KEY가 추가됩니다. – PowerLove