功能描述
在数据库中创建一个新的表空间。
语法格式
CREATE TABLESPACE tablespace_name
[ OWNER { new_owner | CURRENT_USER | SESSION_USER } ]
LOCATION 'directory'
[ WITH ( tablespace_option = value [, ... ] ) ]
参数说明
注意事项
只有系统管理员可以创建表空间。
不允许在一个事务块内部执行CREATE TABLESPACE。
数据库集群中所有的CN和DN节点分配相同的表空间路径。在创建表空间时,用户需要对集群中涉及的所有服务器上的相同位置路径具有权限。
范例
create tablespace gbase8c LOCATION '~/data/dbs';
语法兼容
CREATE TABLESPACE是一种 PostgreSQL扩展。
相关语法
CREATE DATABASE, CREATE TABLE, CREATE INDEX, DROP TABLESPACE, ALTER TABLESPACE
功能描述
创建新的文本搜索配置。
语法格式
CREATE TEXT SEARCH CONFIGURATION name (
PARSER = parser_name |
COPY = source_config
)
参数说明
注意事项
PARSER和COPY选项是互相排斥的,因为当一个现有配置被复制,其分析器配置也被复制了。
范例
CREATE TEXT SEARCH CONFIGURATION gdt1(copy=pg_catalog.english);
CREATE TEXT SEARCH CONFIGURATION
语法兼容
在 SQL 标准中没有 CREATE TEXT SEARCH CONFIGURATION语句。
相关语法
ALTER TEXT SEARCH CONFIGURATION, DROP TEXT SEARCH CONFIGURATION
功能描述
创建一个新的全文检索词典。词典是一种指定在全文检索时识别特定词并处理的方法。
语法格式
CREATE TEXT SEARCH DICTIONARY name (
TEMPLATE = template
[, option = value [, ... ]]
)
参数说明
注意事项
定义文本检索词典的用户将成为其所有者。
范例
CREATE TEXT SEARCH DICTIONARY my_russian (
template = snowball,
language = russian,
stopwords = myrussian
);
语法兼容
在 SQL 标准中没有 CREATE TEXT SEARCH DICTIONARY语句。
相关语法
ALTER TEXT SEARCH DICTIONARY, DROP TEXT SEARCH DICTIONARY
功能描述
创建一个新的文本搜索解析器。
语法格式
CREATE TEXT SEARCH PARSER name (
START = start_function ,
GETTOKEN = gettoken_function ,
END = end_function ,
LEXTYPES = lextypes_function
[, HEADLINE = headline_function ]
)
参数说明
注意事项
除标题函数外其他函数都是必选的。
语法兼容
在 SQL 标准中没有 CREATE TEXT SEARCH PARSER语句。
相关语法
ALTER TEXT SEARCH PARSER, DROP TEXT SEARCH PARSER
功能描述
创建新的文本搜索模板。
语法格式
CREATE TEXT SEARCH TEMPLATE name (
[ INIT = init_function , ]
LEXIZE = lexize_function
)
参数说明
注意事项
参数可以任意排序。
语法兼容
在 SQL 标准中没有 CREATE TEXT SEARCH TEMPLATE语句。
相关语法
ALTER TEXT SEARCH TEMPLATE, DROP TEXT SEARCH TEMPLATE
功能描述
创建新的转换。
语法格式
CREATE [ OR REPLACE ] TRANSFORM FOR type_name LANGUAGE lang_name (
FROM SQL WITH FUNCTION from_sql_function_name [ (argument_type [, ...]) ],
TO SQL WITH FUNCTION to_sql_function_name [ (argument_type [, ...]) ]
);
参数说明
type_name:该转换的数据类型的名称;
lang_name:该转换的语言名称;
from_sql_function_name[(argument_type [, ...])]:将该类型从SQL转换到该过程语言的函数名;
to_sql_function_name[(argument_type [, ...])]:将该类型从过程语言转换到SQL的函数名;
注意事项
要创建转换的用户必须拥有在该类型上的USAGE权限,以及拥有from-SQL 和 to-SQL 函数的EXECUTE权限。
范例
CREATE TRANSFORM FOR hstore LANGUAGE plpythonu (
FROM SQL WITH FUNCTION hstore_to_plpython(internal),
TO SQL WITH FUNCTION plpython_to_hstore(internal)
);
语法兼容
该语法是一种PostgreSQL扩展。不同于SQL标准中的CREATE TRANSFORM命令(用于将数据类型适配到客户端语言)。
相关语法
CREATE FUNCTION, CREATE LANGUAGE, CREATE TYPE, DROP TRANSFORM
功能描述
在当前数据库中定义一种新的数据类型。定义数据类型的用户将成为该数据类型的所有者。
有五种类型的CREATE TYPE,分别为:组合类型、枚举类型、范围类型、基础类型以及shell类型。
组合类型由一个属性名和数据类型的列表指定。如果属性的数据类型是可排序的,也可以指定该属性的排序规则。组合类型本质上和表的行类型相同,但是如果只想定义一种类型,使用CREATE TYPE避免了创建一个实际的表。单独的组合类型也是很有用的,例如可以作为函数的参数或者返回类型。为了能够创建组合类型,必须拥有在其所有属性类型上的USAGE特权。
由若干个标签构成的列表,每一个标签值都是一个非空字符串,且字符串长度必须不超过64个字节。
范围类型的subtype可以是任何带有一个相关的B树操作符类(用来决定该范围类型值的顺序)的类型。通常,子类型的默认B树操作符类被用来决定顺序。
用户可以自定义一种新的基本类型(标量类型)。通常来说这些函数必须是用C或者另外一种低层语言所编写。
是一种用于后面要定义的类型的占位符,通过发出一个不带除类型名之外其他参数的CREATE TYPE命令可以创建这种类型。在创建基本类型时,需要shell类型作为一种向前引用。
语法格式
CREATE TYPE name AS
( [ attribute_name data_type [ COLLATE collation ] [, ... ] ] )
CREATE TYPE name AS ENUM
( [ 'label' [, ... ] ] )
CREATE TYPE name AS RANGE (
SUBTYPE = subtype
[ , SUBTYPE_OPCLASS = subtype_operator_class ]
[ , COLLATION = collation ]
[ , CANONICAL = canonical_function ]
[ , SUBTYPE_DIFF = subtype_diff_function ]
)
CREATE TYPE name (
INPUT = input_function,
OUTPUT = output_function
[ , RECEIVE = receive_function ]
[ , SEND = send_function ]
[ , TYPMOD_IN = type_modifier_input_function ]
[ , TYPMOD_OUT = type_modifier_output_function ]
[ , ANALYZE = analyze_function ]
[ , INTERNALLENGTH = { internallength | VARIABLE } ]
[ , PASSEDBYVALUE ]
[ , ALIGNMENT = alignment ]
[ , STORAGE = storage ]
[ , LIKE = like_type ]
[ , CATEGORY = category ]
[ , PREFERRED = preferred ]
[ , DEFAULT = default ]
[ , ELEMENT = element ]
[ , DELIMITER = delimiter ]
[ , COLLATABLE = collatable ]
)
CREATE TYPE name
参数说明
范围类型的subtype可以是任何带有一个相关的B树操作符类(用来决定该范围类型值的顺序)的类型。通常,子类型的默认B树操作符类被用来决定顺序。要使用一种非默认操作符类,可以用 subtype_opclass指定它的名字。如果子类型是可排序的并且希望在该范围的顺序中使用一种非默认的排序规则,可以用collation选项来指定。
canonical_function必须在声明范围类型之前定义。首先要创建一种shell类型,它是一种没有属性只有名称和所有者的占位符类型。可以通过发出不带额外参数的命令CREATE TYPE name来完成。然后可以使用该shell类型作为参数和结果来声明该函数,并且最终用同样的名称来声明范围类型。这会自动用一种合法的范围类型替换shell类型项。
subtype_diff_function必须接受两个subtype类型的值作为参数,并且返回一个double precision值表示两个给定值之间的差别。虽然这是可选的,但是提供这个函数会让该范围类型列上GiST索引效率更高。
输入函数可以被声明为有一个cstring类型的参数,或者有三个类型分别为cstring、oid、integer的参数。
输入函数必须返回一个该数据类型本身的值。通常,一个输入函数应该被声明为STRICT。如果不是这样,在读到一个NULL输入值时,调用输入函数时第一个参数会是NULL。在这种情况下,该函数必须仍然返回NULL,除非调用函数发生了错误(这种情况主要是想支持域输入函数,域输入函数可能需要拒绝NULL输入)。
输出函数必须被声明为有一个新数据类型的参数。输出函数必须返回类型cstring。对于NULL值不会调用输出函数
如果没有该函数,该类型不能参与到二进制输入中。二进制表达转换成内部形式代价更低,然而却更容易移植(例如,标准的整数数据类型使用网络字节序作为外部二进制表达,而内部表达是机器本地的字节序)。receive_function应该执行足够的检查以确保该值是有效的。
接收函数可以被声明为有一个internal类型的参数,或者有三个类型分别为internal、oid、integer的参数。
接收函数必须返回一个该数据类型本身的值。通常,一个接收函数应该被声明为STRICT。如果不是这样,在读到一个NULL输入值时调用接收函数时第一个参数会是NULL。在这种情况下,该函数必须仍然返回NULL,除非接收函数发生了错误(这种情况主要是想支持域接收函数,域接收函数可能需要拒绝NULL输入)。
如果没有该函数,该类型将不能参与到二进制输出中。发送函数必须被声明为有一个新数据类型的参数。发送函数必须返回类型bytea。对于NULL值不会调用发送函数。
如果该类型支持修饰符(附加在类型声明上的可选约束,例如,char(5)或numeric(30,2)),则需要可选的type_modifier_input_function以及type_modifier_output_function。 GBase 8c允许用户定义的类型有一个或者多个简单常量或者标识符作为修饰符。不过,为了存储在系统目录中,该信息必须能被打包到一个非负整数值中。所声明的修饰符会被以cstring数组的形式传递给type_modifier_input_function。 type_modifier_input_function必须检查该值的合法性(如果值错误就抛出一个错误),如果值正确,要返回一个非负integer值,该值将被存储在“typmod”列中。如果类型没有 type_modifier_input_function则类型修饰符将被拒绝。type_modifier_output_function把内部的整数typmod值转换回正确的形式用于用户显示。type_modifier_output_function必须返回一个cstring值,该值就是追加到类型名称后的字符串。例如,numeric的函数可能会返回(30,2)。如果默认的显示格式就是只把存储的typmod整数值放在圆括号内,则允许省略 type_modifier_output_function。
默认情况下,如果该类型有一个默认的B-tree操作符类,ANALYZE将尝试用类型的“equals”和“less-than”操作符来收集统计信息。这种行为对于非标量类型并不合适,因此可以通过指定一个自定义分析函数来覆盖这种行为。分析函数必须被声明为有一个类型为internal的参数,并且返回一个boolean结果。
虽然只有I/O函数和其他为该类型创建的函数才知道新类型的内部表达的细节,但是内部表达的一些属性必须被向GaussDB 200声明。其中最重要的是internallength。基本数据类型可以是定长的(这种情况下internallength是一个正整数)或者是变长的(把internallength设置为VARIABLE,在内部通过把typlen设置为-1表示)。所有变长类型的内部表达都必须以一个4字节整数开始,internallength定义了总长度。
允许的值等同于以1、2、4或8字节边界对齐。要注意变长类型的alignment参数必须至少为4,因为它们需要包含一个int4作为它们的第一个组成部分。
除plain之外所有的storage值都暗示该数据类型的函数能处理被TOAST过的值。指定的值仅仅是决定一种可TOAST数据类型的列的默认TOAST存储策略,用户可以使用ALTER TABLE SET STORAGE为列选取其他策略。
当新类型的底层实现是以一种现有的类型为参考时,用这种方式指定表达特别有用。
category和preferred参数可以被用来帮助控制在混淆的情况下应用哪一种隐式造型。每一种数据类型都属于一个用单个ASCII 字符命名的分类,并且每一种类型可以是其所属分类中的“首选”。当有助于解决重载函数或操作符时,解析器将优先造型到首选类型(但是只能从同类的其他类型造型)。对于没有隐式转换到或来自任意其他类型的类型,让这些设置保持默认即可。不过,对于有隐式转换的相关类型的组,把它们都标记为属于同一个类别并且选择一种或两种“最常用”的类型作为该类别的首选通常是很有用的。在把一种用户定义的类型增加到一个现有的内建类别(例如,数字或者字符串类型)中时,category参数特别有用。不过,也可以创建新的全部是用户定义类型的类别。对这样的类别,可选择除大写字母之外的任何ASCII字符。
注意事项
如果给定一个模式名,那么该类型将被创建在指定的模式中。否则它会被创建在当前模式中。类型名称必须与同一个模式中任何现有的类型或者域相区别(因为表具有相关的数据类型,类型名称也必须与同一个模式中任何现有表的名字不同)。
范例
CREATE TYPE g_compfoo AS (f1 int, f2 text);
CREATE TYPE
语法兼容
创建组合类型的第一种形式的CREATE TYPE命令符合SQL标准。其他的形式都是 PostgreSQL扩展。SQL标准中的CREATE TYPE语句也定义了其他GBase 8c中没有实现的形式。
相关语法
ALTER TYPE, CREATE DOMAIN, CREATE FUNCTION, DROP TYPE
功能描述
创建用户。
语法格式
CREATE USER name [ [ WITH ] option [ ... ] ]
这里 option 可以是:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| REPLICATION | NOREPLICATION
| BYPASSRLS | NOBYPASSRLS
| CONNECTION LIMIT connlimit
| [ ENCRYPTED ] PASSWORD 'password'
| VALID UNTIL 'timestamp'
| IN ROLE role_name [, ...]
| IN GROUP role_name [, ...]
| ROLE role_name [, ...]
| ADMIN role_name [, ...]
| USER role_name [, ...]
| SYSID uid
参数说明
name:用户名称;
注意事项
CREATE USER是CREATE ROLE的一个别名。唯一的区别是CREATE USER中LOGIN被作为默认值,而NOLOGIN是CREATE ROLE的默认值。
范例
CREATE ROLE gbasedbt3 PASSWORD'root';
CREATE ROLE
语法兼容
CREATE USER语句是一种 PostgreSQL扩展。
相关语法
ALTER USER, DROP USER, CREATE ROLE
功能描述
创建一个视图。视图与基本表不同,是一个虚拟的表。数据库中仅存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。若基本表中的数据发生变化,从视图中查询出的数据也随之改变。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中用户感兴趣的数据及变化。
语法格式
CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] [ RECURSIVE ] VIEW name [ ( column_name [, ...] ) ]
[ WITH ( view_option_name [= view_option_value] [, ... ] ) ]
AS query
[ WITH [ CASCADED | LOCAL ] CHECK OPTION ]
参数说明
CREATE RECURSIVE VIEW [ schema . ] view_name (column_names) AS SELECT ...;
等效于:
CREATE VIEW [ schema . ] view_name AS WITH RECURSIVE view_name (column_names) AS (SELECT ...) SELECT column_names FROM view_name;
对于一个递归视图必须指定一个视图列名列表。
CHECK OPTION不应该和RECURSIVE视图一起使用。
注意,只有在自动可更新的、没有INSTEAD OF触发器或者INSTEAD规则的视图上才支持CHECK OPTION。如果一个自动可更新的视图被定义在一个具有INSTEAD OF触发器的基视图之上,那么LOCAL CHECK OPTION可以被用来检查该自动可更新的视图之上的条件,但具有INSTEAD OF触发器的基视图上的条件不会被检查(一个级联检查选项将不会级联到一个触发器可更新的视图,并且任何直接定义在一个触发器可更新视图上的检查选项将被忽略)。如果该视图或者任何基础关系具有导致INSERT或UPDATE命令被重写的INSTEAD规则,那么在被重写的查询中将忽略所有检查选项,包括任何来自于定义在带有INSTEAD规则的关系之上的自动可更新视图的检查。
注意事项
简单视图是自动可更新的:系统将允许在这类视图上以在常规表上相同的方式使用INSERT、UPDATE以及DELETE语句。如果一个视图满足以下条件,就是自动可更新的:
自动可更新的视图可以混合可更新列以及不可更新列。如果列是对底层基本关系中一个可更新列的简单引用,则是可更新的。否则该列是只读的,并且在一个INSERT或者UPDATE语句尝试对它赋值时会报错。
范例
CREATE VIEW g_view AS SELECT * FROM customer;
CREATE VIEW
语法兼容
CREATE OR REPLACE VIEW是一种 PostgreSQL的语言扩展。
相关语法
ALTER VIEW, DROP VIEW, CREATE MATERIALIZED VIEW
功能描述
DEALLOCATE用于删除前面编写的预备语句。
语法格式
DEALLOCATE [ PREPARE ] { name | ALL }
参数说明
注意事项
如果用户没有明确删除一个预备语句,那么它将在会话结束的时候被删除。
语法兼容
SQL 标准包括一个DEALLOCATE语句, 但是只用于嵌入式 SQL。
相关语法