postgresql
September 16, 2021
Только позитив с Postgres
ALTER TABLE "products" ADD CONSTRAINT "total_check" CHECK (total >= 0);
Нам нужно сохранить значение в базе, которое не может принимать отрицательное значение, например зарплата. Мы создали Integer и вскоре получаем баг, что оно отрицательное и твой код не сработал 🤤
Добавить проверку на уровне базы postgres можно таким SQL запросом:
ALTER TABLE "employees" ADD CONSTRAINT "positive_salary_check" CHECK (salary > 0);
Или в виде knex миграции, если вы понимаете о чем я ;)
import * as Knex from 'knex'; export async function up(knex: Knex): Promise<void> { return knex.schema.raw(` ALTER TABLE "employees" ADD CONSTRAINT "positive_salary_check" CHECK (salary > 0); `); } export async function down(knex: Knex): Promise<void> { return knex.schema.raw(` ALTER TABLE "employees" DROP CONSTRAINT "positive_salary_check"; `); }
А лучше такие поля сразу создавать с проверкой и не ждать бага 😂
DROP TABLE IF EXISTS employees; CREATE TABLE employees ( id SERIAL PRIMARY KEY, first_name VARCHAR (50), last_name VARCHAR (50), birth_date DATE CHECK (birth_date > '1900-01-01'), joined_date DATE CHECK (joined_date > birth_date), salary numeric CHECK(salary > 0) );
Тут сразу несколько примеров как можно это заюзать. Положу тут чтобы не потерять.