#sql #postgresql
Вопрос:
Я создаю представление в Postgresql, в котором я объединяю несколько таблиц в одну. Я хочу добавить новую переменную с меткой времени в конце. Я делал это с такими таблицами, как эта:
CREATE TABLE table
AS with table_temp AS (
--joining tables
);
ALTER TABLE table
ADD COLUMN DateOfChange Timestamp;
UPDATE table
SET DateOfChange = LOCALTIMESTAMP(0) at TIME ZONE 'Etc/GMT 2';
Мне нужно объединить эти предложения в одно (из-за вида).
Сначала я попытался создать таблицу, но, похоже, я делаю это неправильно. Я сделал это:
CREATE TABLE table
AS UPDATE(
ALTER TABLE(
with table_temp AS (
--joining tables
)
ADD COLUMN DateOfChange Timestamp)
SET DateOfChange = LOCALTIMESTAMP(0) at TIME ZONE 'Etc/GMT 2';
Но это не работает. Как это сделать правильно? Можно ли сделать такой вывод?
Комментарии:
1. Вам просто нужно значение столбца по умолчанию?
2. Таблицы/представления переписываются автоматически, поэтому значения столбцов будут меняться. Таким образом, на самом деле это не значение по умолчанию…
3. выберите .. , ЛОКАЛЬНАЯ МЕТКА ВРЕМЕНИ(0) в ЧАСОВОМ ПОЯСЕ «Etc/GMT 2» в качестве даты обмена из —объединение таблиц
Ответ №1:
SET TIME ZONE 'Etc/GMT 2';
CREATE VIEW <view_name> AS
SELECT <your_fields>,DateOfChange Timestamp TIME ZONE DEFAULT LOCALTIMESTAMP(0)
FROM <your_tables_joined_as_needed>;
Ответ №2:
Для этого вы могли бы использовать материализованный вид:
CREATE MATERIALIZED VIEW my_view AS
SELECT <table columns>, LOCALTIMESTAMP(0) AS date_of_change FROM table1
UNION (
SELECT <table columns>, LOCALTIMESTAMP(0) AS date_of_change FROM table2
);
Материализованное представление работает как комбинация таблицы (хранилище) и представлений (извлеченные значения). После создания этого представления вы можете легко обновить данные с помощью
REFRESH MATERIALIZED VIEW my_view;