์ด๊ฑฐํ ์ด ์ ํ์ ์ ๋ฌธ์์ด์ ์ถ๊ฐํ๊ธฐ ์ํด ๋ง์ด๊ทธ๋ ์ด์
๋ฌธ์์ด์ ์์ฑํ๋ ค๊ณ ํฉ๋๋ค. service
์ด์ gamma
๋ฅผ ์ถ๊ฐํ๋ ค๊ณ ํฉ๋๋ค.
์๋ ์ฝ๋๋ก ์๋ํ์ต๋๋ค. ํ ์ด๋ธ๊ณผ ์ด์ด ์ด๋ฏธ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ถฉ๋ํฉ๋๋ค.
const table = 'user_associations'
export function up (knex, Promise) {
return knex.schema.table(table, function (table) {
table.enu('service', ['alpha', 'beta', 'gamma']).notNullable()
})
}
export function down (knex, Promise) {
return knex.schema.table(table, function (table) {
table.enu('service', ['alpha', 'beta']).notNullable()
})
}
alter
API๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์ด๊ฑฐํ์ ํ์ฌ ๊ฒ์ฌ ์ ์ฝ ์กฐ๊ฑด์ผ๋ก ์ํ๋๋ฉฐ .alter()
์๋ ์ด์ ๋ํ ํน๋ณํ ์ฒ๋ฆฌ๊ฐ ์์ต๋๋ค...
ํ ๊ฐ์ง ๋ฌธ์ ๋ .alter()
๊ฐ ์ด์ ์๋ ์ ํ์ด ๋ฌด์์ธ์ง ์์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ enum์ ์ด์ ๊ฒ์ฌ ์ ์ฝ ์กฐ๊ฑด์ ์ญ์ ํด์ผ ํ๋์ง ์ฌ๋ถ๋ฅผ ์์ง ๋ชปํ๋ ๊ฒ์
๋๋ค.
๋ด๊ฐ ์๋ ํ ํ์ฌ ํ์ฉ๋ ์ด๊ฑฐํ ๊ฐ์ knex.raw
๋ก๋ง ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์ผ๋ถ drop old constraint if exist
๋ก ๊ตฌํํ ๋ค์ ์ด์ ๋ณ๊ฒฝ๋ ์ ํ์ด ์ด๊ฑฐํ์ธ ๊ฒฝ์ฐ ์๋ก ์์ฑํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด ๊ธฐ๋ฅ์ด ๊ตฌํ๋๋ ๊ฒ์ ๋ณด๊ณ ์ถ์ต๋๋ค.
@elhigu Postgres ์ด๊ฑฐํ์ ์ฌ์ฉํ ์ ์๋๋ก ์ฌ์ฉ์ ์ง์ ์ด๊ฑฐํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์ง๋ง ํ์ธ ์กฐ๊ฑด ๋ ์ด๊ฑฐํ์ ๋ํด Postgres ์ปค๋ฎค๋ํฐ์์ ์ฝ๊ฐ์ ๋ ผ์์ด ์์ต๋๋ค.
Postgres 9์์ ์ฝ๋๊ฐ _might_ ์ด๋ป๊ฒ ๋ณด์ด๋์ง ์๊ณ ์ถ์ ์ฌ๋์ ์ํด
const formatAlterTableEnumSql = (
tableName,
columnName,
enums,
) => {
const constraintName = `${tableName}_${columnName}_check`;
return [
`ALTER TABLE ${tableName} DROP CONSTRAINT IF EXISTS ${constraintName};`,
`ALTER TABLE ${tableName} ADD CONSTRAINT ${constraintName} CHECK (${columnName} = ANY (ARRAY['${enums.join(
"'::text, '"
)}'::text]));`,
].join('\n');
};
exports.up = async function up(knex) {
await knex.raw(
formatAlterTableEnumSql('myTableName', 'myColumnName', [
'enum1',
'enum2',
'enum3',
])
);
};
exports.down = async function down(knex) {
await knex.raw(
formatAlterTableEnumSql('myTableName', 'myColumnName', [
'enum1',
'enum2',
])
);
};
@holloway ๋ง์ด๊ทธ๋ ์ด์ ์ฝ๋ ์์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋ด๊ฐ ์ฐพ๋ ๋ฐ๋ก ๊ทธ ๊ฒ. ํ์ง๋ง ํ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ํ ๋ 'myColumnName'์์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. "'mycolumnname' ์ด์ด ์กด์ฌํ์ง ์์ต๋๋ค"๋ผ๋ ๋ฉ์์ง๊ฐ ๋ํ๋ฉ๋๋ค. ์ด์ camelCase๊ฐ ๋๋ฝ๋์์ต๋๋ค. ๊ทธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ด๋์ด๊ฐ ์์ต๋๊น?
@Jordan24 ์ฝ๋๋ฅผ ๊ณต์ ํ ์ ์์ต๋๊น?
'use strict';
const formatAlterTableEnumSql = (tableName, columnName, enums) => {
const constraintName = `${tableName}_${columnName}_check`;
return [
`ALTER TABLE ${tableName} DROP CONSTRAINT IF EXISTS ${constraintName};`,
`ALTER TABLE ${tableName} ADD CONSTRAINT ${constraintName} CHECK (${columnName} = ANY (ARRAY['${enums.join(
`'::text, '`
)}'::text]));`
].join('\n');
};
exports.up = async function up(knex) {
await knex.raw(
formatAlterTableEnumSql('item_messages', 'sentMethod', [
'Web App', 'Email', 'Text Message', 'Log Conversation'
])
);
};
exports.down = async function down(knex) {
await knex.raw(
formatAlterTableEnumSql('item_messages', 'sentMethod', [
'Web App', 'Email', 'Text Message'
])
);
};
columnName์ ํฐ๋ฐ์ดํ๋ก ๋ฌถ์ผ๋ฉด ์์๋ฐ์ดํ๊ฐ ์์ ์ฝ๋์์ ์ ๊ฑฐ๋์ง ์๊ธฐ ๋๋ฌธ์ ๊ตฌ๋ฌธ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
ํจ์๋ฅผ ์ญ์ ํ๊ณ ์์ ์ฝ๋๋ฅผ ๋ ๋ฒ๋ง ์์ฑํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
@Jordan24 ๋ฐ์ดํ ์์ด PostgreSQL์ ๋ชจ๋ ์๋ณ์๋ฅผ ์๋ฌธ์๋ก ์ ์ต๋๋ค.
'์ด๊ฑฐํ'์ ์ ์ธํ ๋ชจ๋ ํญ๋ชฉ์ ํ๋ ์ฝ๋ฉํ์ต๋๋ค. @kibertoad ํ ๊ฐ์ฌํฉ๋๋ค!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
Postgres 9์์ ์ฝ๋๊ฐ _might_ ์ด๋ป๊ฒ ๋ณด์ด๋์ง ์๊ณ ์ถ์ ์ฌ๋์ ์ํด