рдореИрдВ рдПрдХ рдХреЙрд▓рдо рдкрд░ рдПрдХ рдмрд╛рдзрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЙрд▓рдо рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред
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();
});
};
@ рд░рд╢ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ .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(); }); };
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЖрдк рдореЗрдВ рд╕реЗ рдЬреЛ рд▓реЛрдЧ Google рд╕реЗ рдпрд╣рд╛рдВ рдЖ рд░рд╣реЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╣реИ:
рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдЧреИрд░-рдЕрд╢рдХреНрдд рд╕реНрддрдВрдн рдХреЛ рдЕрд╢рдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ (рдпрджрд┐ рдЖрдк рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдХреЛ рдЕрд╢рдХреНрдд рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдКрдкрд░/рдиреАрдЪреЗ рдЙрд▓реНрдЯрд╛ рдХрд░реЗрдВ)ред