Я создаю вид в 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
Vesnič 3 Июн 2021 в 11:28

2 ответа

Лучший ответ
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>;
1
Dri372 3 Июн 2021 в 08:50

Вы можете использовать материализованный вид для этого:

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;
1
clemens 3 Июн 2021 в 08:59