Поддерживает ли PostgreSQL сгенерированные столбцы ? Также известен как виртуальные столбцы . Я не говорю о IDENTITY
столбцах .
Я не могу найти никакой информации об этой замечательной функции, но знаю, что она доступна на SQL Server и в последних версиях MariaDB и MySQL.
Эта функция упоминается в стандарте SQL: 2003 , и в 2006 году на форумах по PostgreSQL было несколько обсуждений, но я не могу найти ничего существенного по этому вопросу.
Существует некоторое обсуждение SO, но сейчас оно довольно старое, поэтому вполне может устареть.
postgresql
computed-column
Manngo
источник
источник
Ответы:
Не уверен, что это то, что вам нужно, но обозначения атрибутов и обозначения
row.full_name
функцийfull_name(row)
в postgresql эквивалентны.Это означает, что вы берете за стол
и функция:
и назовите это так:
Это то, что вам нужно?
Чтобы ускорить процесс, вы можете создать индекс выражения:
Или храните все в материализованном виде.
Пример взят здесь: http://bernardoamc.github.io/sql/2015/05/11/postgres-virtual-columns/
источник
select people.full_name from people
илиselect full_name(people) from people
?Нет, это в настоящее время (с Postgres 9.6) не поддерживается.
Единственный обходной путь - использовать триггер или представление, если это простое вычисление, которое вам не нужно индексировать.
источник
Да:
GENERATED ALWAYS AS … STORED
Postgres 12 добавляет функциональность для сгенерированных столбцов, как указано в стандарте SQL: 2003 .
Значение генерируется во время
INSERT
или илиUPDATE
затем сохраняется со строкой, как и любое другое значение.Сгенерированный должен быть основан на базовом столбце той же таблицы или на неизменяемой функции .
Синтаксис прост, предложение на
CREATE TABLE
:Пример:
Функции:
Предостережения:
Видеть:
источник
В зависимости от вашего варианта использования, вы можете достичь такого поведения, объявив новый столбец и заполнив его триггером при вставке / обновлении.
Я бы использовал приведенные выше ответы, если это возможно, чтобы избежать дублирования данных, которые могут быть получены из того, что у вас уже есть, но это делает свое дело и может быть полезно для вычислительных полей, которые вы хотите вычислить один раз и сохранить.
Я рассматривал этот подход для решения проблемы, когда у меня иногда было только 15 цифр 18-значного ключа (последние 3 цифры - просто контрольная сумма), но я хотел иметь возможность принудительно установить связь с внешним ключом.
PG документы по триггерам: https://www.postgresql.org/docs/9.6/sql-createtrigger.html
Пример W3: https://www.w3resource.com/PostgreSQL/postgresql-triggers.php
источник