首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合CREATE TABLE、ALTER TABLE、UPDATE TABLE

组合CREATE TABLE、ALTER TABLE、UPDATE TABLE
EN

Stack Overflow用户
提问于 2021-06-03 16:29:00
回答 2查看 51关注 0票数 1

我正在Postgresql中创建一个视图,在这个视图中,我将多个表连接到一个表中。我想在最后添加一个带有时间戳的新变量。我用这样的表做到了这一点:

代码语言:javascript
复制
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';

我需要将这些句子组合在一个句子中(由于视图)。我试着先创建一个表,但我想我做错了。我这样做了:

代码语言:javascript
复制
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';

但这是行不通的。怎样做才是正确的呢?这样的观点是可能的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-03 16:50:09

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2021-06-03 16:59:47

为此,您可以使用materialized view

代码语言:javascript
复制
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
);

实体化视图的工作方式类似于表(存储)和视图(获取的值)的组合。一旦您创建了这个视图,您就可以通过

代码语言:javascript
复制
REFRESH MATERIALIZED VIEW my_view;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67818015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档