我想使用knex raw进行架构构建。主要是我想用来创建这个会话表,因为看起来knex没有整理功能
CREATE TABLE session (
sid varchar NOT NULL COLLATE "default",
sess json NOT NULL,
expire timestamp(6) NOT NULL
)
WITH (OIDS=FALSE);
ALTER TABLE "session" ADD CONSTRAINT "session_pkey" PRIMARY KEY ("sid") NOT DEFERRABLE INITIALLY IMMEDIATE;
我尝试将整个内容放在knex.raw()的引号中,但它给了我错误。 在这种情况下,最好的策略是什么?
答案 0 :(得分:2)
简短的回答是使用knex.schema.raw
而不是knex.raw
。
下面的原始版本对我有用。我创建了SQL的缩写版本,因为我在使用SQLite进行测试时遇到了SQLite语法错误。另外,请注意使用.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);
});
希望这有帮助! 加里。