更新时间:2026-07-28 GMT+08:00
单节点表DDL操作
规格约束
- 单节点表仅支持创建为复制表类型,不支持创建为分布表(指定分布列)。
- 继承复制表约束:不支持创建全局二级索引(GSI),不支持定义为hash bucket表。
- 仅支持在系统预置的单节点组Node Group上创建单节点表。
- M-Compatibility模式数据库下不支持使用单节点表。
- 从不支持单节点表的版本升级到新版本,升级观察期间,不支持默认创建单节点表。
- 从不支持单节点表的版本升级到新版本,升级观察期间,新版本系统预置的单节点组Node Group上不允许进行创建表操作。
- 当系统预置的单节点组Node Group上已创建单节点表,不支持对Node Group进行缩容。
- 不支持物化视图、不支持外表。
- 单节点表逻辑解码和备份恢复只支持同构场景,异构场景可能会导致错误。
- 仅支持复制表基础上的本地临时表、unlogged表和全局临时表、一级分区表模式,其他表类型均不支持。
创建单节点表
可通过以下方式进行创建单节点表,不同的创建方式需满足不同条件:
- 显式创建单节点表
- 设置GUC参数single_node_table_strategy的值不为FORBID。
- 在CREATE TABLE语句中,显式指定TO GROUP group_name子句,且指定的节点组为系统预定义的单节点组Node Group(类型标识为's'),其名称需以“sys_single_group”为前缀进行命名。如下所示:
CREATE TABLE table1 (id INT) TO GROUP sys_single_group1;
- 隐式创建单节点表
- 在CREATE TABLE语句中,未明确指定TO GROUP group_name子句时,系统自动选择一个类型为's'的节点组Node Group,其名称前缀为“sys_single_group”。
- 设置GUC参数single_node_table_strategy:
- 当设置为ALLOW_DEFAULT_NON_PART时,支持隐式创建非分区表类型的单节点表。
- 当设置为ALLOW_DEFAULT_ALL,既支持隐式创建非分区表类型的单节点表,也支持隐式创建一级分区表类型的单节点表。
- 待创建表归属的Schema具有单节点属性,具体请参见设置Schema的单节点属性相关描述。
GUC参数的具体使用请参见《参考》中“数据库运行参数说明 > GUC参数说明 > 单节点表”章节。
语法示例:
-- 显式创建单节点表。
gaussdb=# CREATE TABLE single_table(a int) DISTRIBUTE BY REPLICATION TO GROUP sys_single_group1;
CREATE TABLE
gaussdb=# \d+ single_table
Table "public.single_table"
Column | Type | Modifiers | Storage | Stats target | Description
--------+---------+-----------+---------+--------------+-------------
a | integer | | plain | |
Has OIDs: no
Distribute By: REPLICATION
Location Nodes: datanode1
Options: orientation=row, is_single_node=true, logical_repl_node=-1, compression=no, storage_type=USTORE, segment=off
-- 将GUC参数single_node_table_strategy设置为allow_default_all,详情请参见《参考》中“数据库运行参数说明 > GUC参数说明 > 单节点表”章节。
-- 设置完成后,查看single_node_table_strategy的值是否为allow_default_all。
gaussdb=# SHOW single_node_table_strategy;
single_node_table_strategy
----------------------------
allow_default_all
(1 row)
gaussdb=# CREATE SCHEMA schema1 SET NODE GROUP sys_single_group1;
CREATE SCHEMA
-- 隐式创建单节点表。
gaussdb=# CREATE TABLE schema1.single_table1(a int);
CREATE TABLE
gaussdb=# \d+ schema1.single_table1
Table "schema1.single_table1"
Column | Type | Modifiers | Storage | Stats target | Description
--------+---------+-----------+---------+--------------+-------------
a | integer | | plain | |
Has OIDs: no
Distribute By: REPLICATION
Location Nodes: datanode1
Options: orientation=row, is_single_node=true, logical_repl_node=-1, compression=no, storage_type=USTORE, segment=off
gaussdb=# DROP TABLE single_table;
DROP TABLE
gaussdb=# DROP TABLE schema1.single_table1;
DROP TABLE
gaussdb=# DROP SCHEMA schema1 CASCADE;
DROP SCHEMA 设置Schema的单节点属性
可通过以下方式进行设置Schema的单节点属性,不同的设置方式需满足不同条件:
- 显式设置Schema的单节点属性
- 隐式设置Schema的单节点
- 在CREATE SCHEMA语句中,未明确指定SET NODE GROUP group_name子句时,系统自动选择一个类型为's'的节点组Node Group,其名称前缀为“sys_single_group”。
- 在普通用户下创建具有单节点属性的Schema,不支持在初始用户、具有运维/安全等管理员权限的用户下隐式设置Schema的单节点属性。
- 设置GUC参数default_nodegroup的值为SCHEMA。
- GUC参数的具体使用请参见《参考》中“数据库运行参数说明 > GUC参数说明 > 单节点表”章节。
- CREATE SCHEMA语法包含CREATE TABLE子句的复合SQL语句不支持单节点表相关功能,既不支持单节点表创建,也不支持模式设置单节点表属性。具体语法请参见《参考》中“SQL参考 > SQL语法 > C > CREATE SCHEMA”章节。
语法示例:
-- 创建模式,显式设置单节点属性。 gaussdb=# CREATE SCHEMA schema1 SET NODE GROUP sys_single_group1; CREATE SCHEMA gaussdb=# SELECT * FROM pg_namespace WHERE nspname='schema1'; nspname | nspowner | nsptimeline | nspacl | in_redistribution | nspblockchain | nspcollation | nspgroupoid ---------+----------+-------------+--------+-------------------+---------------+--------------+------------- schema1 | 10 | 0 | | n | f | | 16389 (1 row) gaussdb=# DROP SCHEMA schema1 CASCADE; DROP SCHEMA gaussdb=# CREATE USER test_usr PASSWORD "********"; CREATE ROLE gaussdb=# GRANT ALL ON DATABASE POSTGRES TO test_usr; GRANT -- 切换到test_usr用户。 -- 将GUC参数default_nodegroup设置为schema,详情请参见《参考》中“数据库运行参数说明 > GUC参数说明 > 单节点表”章节。 -- 设置完成后,查看default_nodegroup的值是否为schema。 gaussdb=> SHOW default_nodegroup; default_nodegroup ---------------------------- schema (1 row) -- 创建模式,隐式设置单节点属性。 gaussdb=> CREATE SCHEMA schema2; CREATE SCHEMA gaussdb=> SELECT * FROM pg_namespace WHERE nspname='schema2'; nspname | nspowner | nsptimeline | nspacl | in_redistribution | nspblockchain | nspcollation | nspgroupoid ---------+----------+-------------+--------+-------------------+---------------+--------------+------------- schema2 | 16395 | 0 | | n | f | | 16390 (1 row) gaussdb=# DROP SCHEMA schema2 CASCADE; DROP SCHEMA
修改Schema的单节点属性
语法示例:
gaussdb=# CREATE SCHEMA schema1; CREATE SCHEMA gaussdb=# SELECT * FROM pg_namespace WHERE nspname='schema1'; nspname | nspowner | nsptimeline | nspacl | in_redistribution | nspblockchain | nspcollation | nspgroupoid ---------+----------+-------------+--------+-------------------+---------------+--------------+------------- schema1 | 10 | 0 | | n | f | | (1 row) -- 修改Schema的单节点属性。 gaussdb=# ALTER SCHEMA schema1 SET NODE GROUP sys_single_group1; ALTER SCHEMA gaussdb=# SELECT * FROM pg_namespace WHERE nspname='schema1'; nspname | nspowner | nsptimeline | nspacl | in_redistribution | nspblockchain | nspcollation | nspgroupoid ---------+----------+-------------+--------+-------------------+---------------+--------------+------------- schema1 | 10 | 0 | | n | f | | 16389 (1 row) -- 删除Schema的单节点属性。 gaussdb=# ALTER SCHEMA schema1 DROP NODE GROUP; ALTER SCHEMA gaussdb=# SELECT * FROM pg_namespace WHERE nspname='schema1'; nspname | nspowner | nsptimeline | nspacl | in_redistribution | nspblockchain | nspcollation | nspgroupoid ---------+----------+-------------+--------+-------------------+---------------+--------------+------------- schema1 | 10 | 0 | | n | f | | (1 row) gaussdb=# DROP SCHEMA schema1 CASCADE; DROP SCHEMA
父主题: 操作指导