短い答えは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
ああ、それを持っています。 postgresqlがPRIMARY KEYを追加しています。 – PowerLove