Knex: рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рдЕрдВрджрд░ рдХреЙрд▓рдо рдореЗрдВ рдЕрд╢рдХреНрдд рдмрд╛рдзрд╛ рдХреИрд╕реЗ рдмрджрд▓реЗрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 22 рдлрд╝рд░ре░ 2016  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: knex/knex

рдореИрдВ рдПрдХ рдХреЙрд▓рдо рдкрд░ рдПрдХ рдмрд╛рдзрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЙрд▓рдо рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред

exports.up = function(knex, Promise) {  
  return knex.schema.table("images", function(table) {
    table.string("checksum").notNullable();
  });
};

exports.down = function(knex, Promise) {
  return knex.schema.table("images", function(table) {
    table.string("checksum").nullable();
  });
};
PR please feature request schema

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЖрдк рдореЗрдВ рд╕реЗ рдЬреЛ рд▓реЛрдЧ Google рд╕реЗ рдпрд╣рд╛рдВ рдЖ рд░рд╣реЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╣реИ:

рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдЧреИрд░-рдЕрд╢рдХреНрдд рд╕реНрддрдВрдн рдХреЛ рдЕрд╢рдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ (рдпрджрд┐ рдЖрдк рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдХреЛ рдЕрд╢рдХреНрдд рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдКрдкрд░/рдиреАрдЪреЗ рдЙрд▓реНрдЯрд╛ рдХрд░реЗрдВ)ред

exports.up = knex => {
  return knex.schema
    .alterTable('images', (table) => {
      table.string('checksum').nullable().alter();
    });
};

exports.down = knex => {
  return knex.schema
    .alterTable('images', table => {
      table.string('checksum').notNullable().alter();
    });
};

рд╕рднреА 10 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@ рд░рд╢ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ .nullable() рдФрд░ .notNullable() рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

ALTER TABLE tableName ALTER COLUMN columnName DROP NOT NULL
ALTER TABLE tableName ALTER COLUMN columnName SET NOT NULL

рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореБрдЭреЗ рдПрдкреАрдЖрдИ рдореЗрдВ .raw рд╕реЗ рдЕрд▓рдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред

@rhys-vdw рдЗрд╕ рдкрд░ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдХрд╣рдирд╛ рд╣реИ? рдХреНрдпрд╛ .dropNotNull() / .setNotNull() рдпрд╛ рд╕рдорд╛рди рд╕реНрдХреАрдорд╛рдмрд┐рд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдпреЛрдЧреНрдп рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдпрд╣ рдХрд╛рдлреА рд╣рдж рддрдХ .dropForeign() рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ .dropNotNull ()/.setNotNull () рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╕реНрдХреАрдорд╛рдмрд┐рд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдпреЛрдЧреНрдп рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рд╣рд╛рдВ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж .dropNullable(...columnNames) рдФрд░ .setNullable(...columnNames) ред

@ rhys-vdw рджреВрд╕рд░реЗ рд╡рд┐рдЪрд╛рд░ рдкрд░, рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рднреА рдмреЛрд▓реА рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрд╕реБрд╡рд┐рдзрд╛ рд╣реЛрдЧреАред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ:

Postgres dropNullable: ALTER TABLE table ALTER COLUMN columnName DROP NOT NULL
Postgres setNullable: ALTER TABLE table ALTER COLUMN columnName SET NOT NULL

MSSQL dropNullable: ALTER TABLE table ALTER COLUMN columnName columnType NULL
MSSQL setNullable: ALTER TABLE table ALTER COLUMN columnName columnType NOT NULL

MySQL/Maria/Oracle dropNullable: ALTER TABLE table MODIFY columnName columnType NULL;
MySQL/Maria/Oracle setNullable: ALTER TABLE table MODIFY columnName columnType NOT NULL;

Sqlite: No support?

рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдИ рдЬрд╛ рд░рд╣реА рдмреЛрд▓реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд╕рдВрдЧрдд рддрд░реНрдХ рд╣реЛрдВрдЧреЗред рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдХреЗрд╡рд▓ рдирд╛рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдирд╛рдо + рдбреЗрдЯрд╛рдЯрд╛рдЗрдк (+ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди?) рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпрд╛ рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ?

рд╣рдо SQLite рдФрд░ Postgres рджреЛрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рдереЗ рд▓реЗрдХрд┐рди SQLite рдЗрддрдирд╛ рдЕрд▓рдЧ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЕрдореВрд░реНрддрддрд╛ рдЗрд╕реЗ рдЫреБрдкрд╛ рдирд╣реАрдВ рд╕рдХрддреА рд╣реИ ... рдЗрд╕рд▓рд┐рдП рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдирд╛ рд╢рд╛рдпрдж рд╕рд╣реА рдмрд╛рдд рд╣реИред рд░реЗрд▓ рдХреЗ ActiveRecord рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдмрджрд▓рддреА рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж рдпрд╣ рдкреНрд░реЗрд░рдгрд╛ рд▓реЗрдиреЗ рдХрд╛ рд╕реНрдерд╛рди рд╣реИ?

рдЖрдЦрд┐рд░рдХрд╛рд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ред рдореИрдВрдиреЗ рдЬрдирд╕рдВрдкрд░реНрдХ рдХрд┐рдпрд╛ рд╣реИред

+1 - рдореИрдВ рдЕрднреА рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рднреА рдЖрдпрд╛ рд╣реВрдВ, рдФрд░ рдпрд╣ рдПрдХ рдЕрд╡рд░реЛрдзрдХ рдХреА рдмрд╛рдд рд╣реИред рдХрд┐рд╕реА рднреА рд╕рдордп рдЖрдкрдХреЛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЧреИрд░-рд╢реВрдиреНрдп рдХреЙрд▓рдо рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдорд╛рдирдЪрд┐рддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

@morungos рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрд╡рд░реЛрдзрдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╣рдореЗрд╢рд╛ knex.raw рдХреЛ рд╕рд╛рдорд╛рди рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП knex рдореЗрдВ рд╡рд┐рд╢реЗрд╖ API рдирд╣реАрдВ рд╣реИрдВ (рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд▓рд┐рдЦрддреЗ рд╕рдордп рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬрд╝реЗрдВ)ред

рдпрджрд┐ рдпрд╣ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рднреА рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ https://github.com/tgriesser/knex/pull/1759

рд╣рд╛рдБ, рдореИрдВрдиреЗ рдХрдИ рдмрд╛рд░ .raw рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдкреВрд░реЗ рдмрдпрд╛рдиреЛрдВ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдШреБрдЯрдиреЗ рдХреЗ рдкреНрд░рд╡рд╛рд╕ рдХреЗ рдкреВрд░реЗ рдЙрдкрдпреЛрдЧ рдкрд░ рд╕рд╡рд╛рд▓ рдЙрдард╛рдиреЗ рд▓рдЧрддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛: рдХреБрдЫ рдЧреИрд░-рд╢реВрдиреНрдп рдЕрдЬреАрдм рдорд╛рди рдХреЗ рд▓рд┐рдП рдмрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ, рдлрд┐рд░ рдорд╛рдиреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдкрд┐рдВрдЧ рдирд┐рдпрдо рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдлрд┐рд░ рдореВрд▓ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдЕрдЦрдВрдбрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ MySQL рдХреЗ рд╕рд╛рде рдФрд░ рдордзреНрдпрд╡рд░реНрддреА рдЪрд░рдгреЛрдВ рдХреЗ рджреМрд░рд╛рди рднреА рдЕрдЦрдВрдбрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреА рдпрд╣ рдмреБрд░реА рдЖрджрдд рд╣реИред

рдЖрдк рдореЗрдВ рд╕реЗ рдЬреЛ рд▓реЛрдЧ Google рд╕реЗ рдпрд╣рд╛рдВ рдЖ рд░рд╣реЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╣реИ:

рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдЧреИрд░-рдЕрд╢рдХреНрдд рд╕реНрддрдВрдн рдХреЛ рдЕрд╢рдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ (рдпрджрд┐ рдЖрдк рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдХреЛ рдЕрд╢рдХреНрдд рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдКрдкрд░/рдиреАрдЪреЗ рдЙрд▓реНрдЯрд╛ рдХрд░реЗрдВ)ред

exports.up = knex => {
  return knex.schema
    .alterTable('images', (table) => {
      table.string('checksum').nullable().alter();
    });
};

exports.down = knex => {
  return knex.schema
    .alterTable('images', table => {
      table.string('checksum').notNullable().alter();
    });
};

рдХреЗрд╡рд▓ FYI рдХрд░реЗрдВ, рдпрджрд┐ рдЖрдк nullable рдХреЛ nonNullable рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЙрд╕ рдХреЙрд▓рдо рдХреЛ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рд╕реЗ рднрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреАред

рдЖрдк рдореЗрдВ рд╕реЗ рдЬреЛ рд▓реЛрдЧ Google рд╕реЗ рдпрд╣рд╛рдВ рдЖ рд░рд╣реЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╣реИ:

рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдЧреИрд░-рдЕрд╢рдХреНрдд рд╕реНрддрдВрдн рдХреЛ рдЕрд╢рдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ (рдпрджрд┐ рдЖрдк рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдХреЛ рдЕрд╢рдХреНрдд рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдКрдкрд░/рдиреАрдЪреЗ рдЙрд▓реНрдЯрд╛ рдХрд░реЗрдВ)ред

exports.up = knex => {
  return knex.schema
    .alterTable('images', (table) => {
      table.string('checksum').nullable().alter();
    });
};

exports.down = knex => {
  return knex.schema
    .alterTable('images', table => {
      table.string('checksum').notNullable().alter();
    });
};
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

fsebbah picture fsebbah  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

npow picture npow  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

PaulOlteanu picture PaulOlteanu  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lanceschi picture lanceschi  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mtom55 picture mtom55  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ