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

Тут сразу несколько примеров как можно это заюзать. Положу тут чтобы не потерять.