本文介绍如何通过 SQL 命令来创建表。
在 TDSQL PG 中,一个表是一系列二维数组的集合,用来代表和储存数据对象之间的关系。
前置条件
拥有CREATE权限才能创建表。
数据库表命名规范
创建表时,需要先为表命名,以下是定义表名时需要遵循的要求:
- 在 TDSQL PG 数据库中,每个表的名称必须保证在 SCHEMA 内唯一。
- 表名称不能超过 63 个字符(超过63个字符表名称会被截断,保留前63个字符)。
- 建议给表起一个意义明确的名字,不要使用
t1、table1这样的表名。
创建表语法
使用CREATE TABLE语句创建表。CREATE TABLE将在当前数据库中创建一个新的、初始为空的表。该表将由执行该命令的用户所拥有。
语法如下:
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name ( [
{ column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
| table_constraint }
[, ... ]
] )
[
DISTRIBUTE BY { REPLICATION | { [ SHARD ] ( column_name ) } }
]
参数说明:
TEMPORARYorTEMP
如果指定,该表被创建为一个临时表。临时表会被在会话结束时自动被删除,或者也可以选择在当前事务结束时删除(见下文的ON COMMIT)。当临时表存在时,已有的同名持久表将对于当前会话不可见,不过可以使用模式限定的名称进行引用。在一个临时表上创建的任何索引也自动地变为临时的。自动清理守护进程不能访问并且因此也不能清理或分析临时表。由于这个原因,应该通过会话的 SQL 命令执行合适的清理和分析操作。例如,如果一个临时表将要被用于复杂的查询,最好在插入数据完成后在其上运行ANALYZE。UNLOGGED
如果指定,那么该表将不被日志记录,其中的数据不会写入到预写式日志中,也不会被复制到后备服务器中。表上创建的索引也默认不进行日志记录。这让它们比普通表快非常多。但是,该类型的表在数据库发生崩溃时,也不会被记录(在崩溃或非正常关闭之后会被自动地截断)。请谨慎使用。IF NOT EXISTS
表不存在时创建,当表存在时会给出提示。table_name
要被创建的表名(可以选择用schema限定)。column_name
要在新表中创建的一列的名称。data_type
该列的数据类型。这可以包括数组说明符。COLLATE collation
COLLATE子句为该列(必须是一种可排序数据类型)赋予一个排序规则。如果没有指定,将使用该列数据类型的默认排序规则。column_constraint
列级约束。table_constraint
表级约束。DISTRIBUTE BY
该子句指定表如何在 Datanode 之间分布或复制。REPLICATION
表的每一行都会被复制到TDSQL PG数据库集群的所有Datanode上。SHARD ( column_name )
指定shard key建表。表的每一行会根据shard key对应的值计算出shardid,然后再根据系统中的shardmap中存储的Datanode与shardid的映射关系,将数据存储到对应的Datanode中。
说明:
您可以使用
\dt语句查看数据库中表的信息。