diff --git a/content/zh/docs/Developerguide/CREATE-TABLE.md b/content/zh/docs/Developerguide/CREATE-TABLE.md index 60c0a189d2dc6ee36c78a399b7c6cc630e525fb4..1a0fe7198aa3056f565106fe801affe318ab7956 100644 --- a/content/zh/docs/Developerguide/CREATE-TABLE.md +++ b/content/zh/docs/Developerguide/CREATE-TABLE.md @@ -88,15 +88,21 @@ - **GLOBAL | LOCAL** - 创建临时表时可以在TEMP或TEMPORARY前指定GLOBAL或LOCAL关键字。目前这两个关键字的设立,仅是为了兼容SQL标准,实际上无论指定GLOBAL还是LOCAL,openGauss都会创建本地临时表。 + 创建临时表时可以在TEMP或TEMPORARY前指定GLOBAL或LOCAL关键字。如果指定GLOBAL关键字,openGauss会创建全局临时表,否则openGauss会创建本地临时表。 - **TEMPORARY | TEMP** - 如果指定TEMP或TEMPORARY关键字,则创建的表为临时表。临时表只在当前会话可见,本会话结束后会自动删除。因此,在除当前会话连接的数据库节点故障时,仍然可以在当前会话上创建和使用临时表。由于临时表只在当前会话创建,对于涉及对临时表操作的DDL语句,会产生DDL失败的报错。因此,建议DDL语句中不要对临时表进行操作。TEMP和TEMPORARY等价。 + 如果指定TEMP或TEMPORARY关键字,则创建的表为临时表。临时表分为全局临时表和本地临时表两种类型。创建临时表时如果指定GLOBAL关键字则为全局临时表,否则为本地临时表。 + + 全局临时表的元数据对所有会话可见,会话结束后元数据继续存在。会话与会话之间的用户数据、索引和统计信息相互隔离,每个会话只能看到和更改自己提交的数据。全局临时表有两种模式:一种是基于会话级别的(ON COMMIT PRESERVE ROWS), 当会话结束时自动清空用户数据;一种是基于事务级别的(ON COMMIT DELETE ROWS), 当执行commit或rollback时自动清空用户数据。建表时如果没有指定ON COMMIT选项,则缺省为会话级别。与本地临时表不同,全局临时表建表时可以指定非pg_temp_开头的schema。 + + 本地临时表只在当前会话可见,本会话结束后会自动删除。因此,在除当前会话连接的数据库节点故障时,仍然可以在当前会话上创建和使用临时表。由于临时表只在当前会话创建,对于涉及对临时表操作的DDL语句,会产生DDL失败的报错。因此,建议DDL语句中不要对临时表进行操作。TEMP和TEMPORARY等价。 >![](public_sys-resources/icon-notice.gif) **须知:** - >- 临时表通过每个会话独立的以pg\_temp开头的schema来保证只对当前会话可见,因此,不建议用户在日常操作中手动删除以pg\_temp,pg\_toast\_temp开头的schema。 + >- 本地临时表通过每个会话独立的以pg\_temp开头的schema来保证只对当前会话可见,因此,不建议用户在日常操作中手动删除以pg\_temp,pg\_toast\_temp开头的schema。 >- 如果建表时不指定TEMPORARY/TEMP关键字,而指定表的schema为当前会话的pg\_temp\_开头的schema,则此表会被创建为临时表。 + >- ALTER/DROP全局临时表和索引,如果其它会话正在使用它,禁止操作。 + >- 全局临时表的DDL只会影响当前会话的用户数据和索引。例如truncate、reindex、analyze只对当前会话有效。 - **IF NOT EXISTS** @@ -225,7 +231,7 @@ - PRESERVE ROWS(缺省值):提交时不对临时表做任何操作,临时表及其表数据保持不变。 - DELETE ROWS:提交时删除临时表中数据。 - - DROP:提交时删除此临时表。 + - DROP:提交时删除此临时表。(只支持本地临时表,不支持全局临时表) - **COMPRESS | NOCOMPRESS** @@ -468,7 +474,7 @@ postgres=# CREATE TEMPORARY TABLE warehouse_t24 W_GMT_OFFSET DECIMAL(5,2) ); ---事务中创建表临时表,并指定提交事务时删除该临时表数据。 +--创建本地临时表,并指定提交事务时删除该临时表数据。 postgres=# CREATE TEMPORARY TABLE warehouse_t25 ( W_WAREHOUSE_SK INTEGER NOT NULL, @@ -487,6 +493,15 @@ postgres=# CREATE TEMPORARY TABLE warehouse_t25 W_GMT_OFFSET DECIMAL(5,2) ) ON COMMIT DELETE ROWS; +--创建全局临时表,并指定会话结束时删除该临时表数据。 +postgres=# CREATE GLOBAL TEMPORARY TABLE gtt1 +( + ID INTEGER NOT NULL, + NAME CHAR(16) NOT NULL, + ADDRESS VARCHAR(50) , + POSTCODE CHAR(6) +) ON COMMIT PRESERVE ROWS; + --创建表时,不希望因为表已存在而报错。 postgres=# CREATE TABLE IF NOT EXISTS tpcds.warehouse_t8 ( diff --git a/content/zh/menu/index.md b/content/zh/menu/index.md index af3aa73c0030268bef77acb8ef21de8087a0ff32..e0e19870d37c6e1e79921a11280c9442d073421a 100644 --- a/content/zh/menu/index.md +++ b/content/zh/menu/index.md @@ -663,6 +663,7 @@ headless: true - [其它函数]({{< relref "./docs/Developerguide/其它函数.md" >}}) - [统计信息函数]({{< relref "./docs/Developerguide/统计信息函数.md" >}}) - [触发器函数]({{< relref "./docs/Developerguide/触发器函数.md" >}}) + - [全局临时表函数]({{< relref "./docs/Developerguide/全局临时表函数.md" >}}) - [其他系统函数]({{< relref "./docs/Developerguide/其他系统函数.md" >}}) - [表达式]({{< relref "./docs/Developerguide/表达式.md" >}}) - [简单表达式]({{< relref "./docs/Developerguide/简单表达式.md" >}}) @@ -981,6 +982,9 @@ headless: true - [PG\_GET\_INVALID\_BACKENDS]({{< relref "./docs/Developerguide/PG_GET_INVALID_BACKENDS.md" >}}) - [PG\_GET\_SENDERS\_CATCHUP\_TIME]({{< relref "./docs/Developerguide/PG_GET_SENDERS_CATCHUP_TIME.md" >}}) - [PG\_GROUP]({{< relref "./docs/Developerguide/PG_GROUP.md" >}}) + - [PG\_GTT_RELSTATS]({{< relref "./docs/Developerguide/PG_GTT_RELSTATS.md" >}}) + - [PG\_GTT_STATS]({{< relref "./docs/Developerguide/PG_GTT_STATS.md" >}}) + - [PG\_GTT_ATTACHED_PIDS]({{< relref "./docs/Developerguide/PG_GTT_ATTACHED_PIDS.md" >}}) - [PG\_INDEXES]({{< relref "./docs/Developerguide/PG_INDEXES.md" >}}) - [PG\_LOCKS]({{< relref "./docs/Developerguide/PG_LOCKS.md" >}}) - [PG\_NODE\_ENV]({{< relref "./docs/Developerguide/PG_NODE_ENV.md" >}}) @@ -1347,4 +1351,4 @@ headless: true - [gs\_ctl 重建备实例过程被中断导致秘钥文件不完整恢复方法]({{< relref "./docs/Toolreference/gs_ctl-重建备实例过程被中断导致秘钥文件不完整恢复方法.md" >}}) - [gs\_collector工具支持收集的系统表和视图列表]({{< relref "./docs/Toolreference/gs_collector工具支持收集的系统表和视图列表.md" >}}) -- [术语表]({{< relref "./docs/Glossary/Glossary.md" >}}) \ No newline at end of file +- [术语表]({{< relref "./docs/Glossary/Glossary.md" >}})