knex 原始查询模式生成器



我想使用 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(( 的引号中,但它给了我错误。在这种情况下,最好的策略是什么?

简短的回答是使用 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);
    });

希望这有帮助!加里。

相关内容

  • 没有找到相关文章

最新更新