Объединение СОЗДАТЬ ТАБЛИЦУ, ИЗМЕНИТЬ ТАБЛИЦУ, ОБНОВИТЬ ТАБЛИЦУ

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