2017-11-16 4 views
0

Ich möchte die KNX-Raw für Schema-Erstellung verwenden. Vor allem möchte ich diese Sitzung Tabelle zu erstellen, verwenden, da wie Knex scheint nicht collate FunktionalitätKnex Rohabfrage Schema Builder

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; 

Ich habe versucht, hat die ganze Sache in Anführungszeichen in knex.raw setzen(), aber es gibt mir Fehler. Was ist die beste Strategie in diesem Fall?

Antwort

2

Die kurze Antwort ist knex.schema.raw statt knex.raw zu verwenden.

Das rohe unten arbeitete für mich. Ich habe eine abgekürzte Version der SQLs erstellt, seit ich beim Testen mit SQLite SQLite-Syntaxfehler erhalten habe. Beachten Sie auch die Verwendung von .on('query-error', ... die bei der Rückgabe von SQL-Engine-Fehlern hilfreich ist.

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); 
    }); 

Hoffe, das hilft! Gary.

+0

Vielen Dank! Das hat mir definitiv geholfen. Als ich versuchte, diesen Code auszuführen, gab es mir Typ "Sid" existiert nicht Fehler, obwohl die Sitzungstabelle erstellt wird. – PowerLove

+0

Ah nvm, hab es. vergessen postgresql ist PRIMÄRSCHLÜSSEL HINZUFÜGEN. – PowerLove

Verwandte Themen