Как сделать auto increment колонку, которая увеличивается относительно другой колонки?

В PostgreSQL нет встроенной возможности для создания автоматически увеличивающейся колонки, которая бы зависела от другой колонки. Однако, вы можете достичь желаемого результата, написав триггер, который будет автоматически обновлять значение увеличивающейся колонки на основе значений другой колонки.

Прежде всего, вам необходимо создать таблицу с двумя колонками, одна из которых будет зависеть от другой:

CREATE TABLE my_table (
    id SERIAL PRIMARY KEY,
    other_column INTEGER,
    increment_column INTEGER
);

Затем создайте триггер, который будет обновлять значение увеличивающейся колонки на основе значения другой колонки. Для этого используйте функцию, которая будет выполняться при вставке или обновлении данных таблицы:

CREATE OR REPLACE FUNCTION update_increment_column()
    RETURNS TRIGGER AS $$
BEGIN
    NEW.increment_column = NEW.other_column + 1;
    RETURN NEW;
END; $$
LANGUAGE plpgsql;

В следующем шаге необходимо создать сам триггер, который будет вызывать функцию при вставке или обновлении данных:

CREATE TRIGGER increment_column_trigger
    BEFORE INSERT OR UPDATE ON my_table
    FOR EACH ROW
    EXECUTE FUNCTION update_increment_column();

Теперь, при вставке или обновлении данных в таблице, значение увеличивающейся колонки будет автоматически обновляться на основе значения другой колонки:

INSERT INTO my_table (other_column) VALUES (5);

Для текущего примера, значение increment_column будет равно 6, так как значение other_column равно 5.

UPDATE my_table SET other_column = 10 WHERE id = 1;

После этого обновления, значение increment_column будет равно 11, так как значение other_column изменено на 10.

Теперь вы можете использовать этот подход для создания автоматически увеличивающейся колонки, которая зависит от других значений в таблице в PostgreSQL.