云服务器内容精选

  • 语法格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 CREATE TYPE name AS ( [ attribute_name data_type [ COLLATE collation ] [, ... ] ] ) 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 CREATE TYPE name AS ENUM ( [ 'label' [, ... ] ] )
  • 参数说明 复合类型 name 要创建的类型的名称(可以被模式限定)。 attribute_name 复合类型的一个属性(列)的名称。 data_type 要成为复合类型的一个列的现有数据类型的名称。 collation 要关联到复合类型的一列的现有排序规则的名称。 基本类型 自定义基本类型时,参数可以以任意顺序出现,input_function和output_function为必选参数,其它为可选参数。 input_function 将数据从类型的外部文本形式转换为内部形式的函数名。 输入函数可以被声明为有一个cstring类型的参数,或者有三个类型分别为cstring、 oid、integer的参数。 cstring参数是以C字符串存在的输入文本。 oid参数是该类型自身的OID(对于数组类型则是其元素类型的OID)。 integer参数是目标列的typmod(如果知道,不知道则将传递 -1)。 输入函数必须返回一个该数据类型本身的值。通常,一个输入函数应该被声明为STRICT。 如果不是这样,在读到一个NULL输入值时,调用输入函数时第一个参数会是NULL。在这种情况下,该函数必须仍然返回NULL,除非调用函数发生了错误(这种情况主要是想支持域输入函数,域输入函数可能需要拒绝NULL输入)。 输入和输出函数能被声明为具有新类型的结果或参数是因为:必须在创建新类型之前创建这两个函数。而新类型应该首先被定义为一种shell type,它是一种占位符类型,除了名称和拥有者之外它没有其他属性。这可以通过不带额外参数的命令CREATE TYPE name做到。然后用C写的I/O函数可以被定义为引用这种shell type。最后,用带有完整定义的CREATE TYPE把该shell type替换为一个完全的、合法的类型定义,之后新类型就可以正常使用了。 output_function 将数据从类型的内部形式转换为外部文本形式的函数名。 输出函数必须被声明为有一个新数据类型的参数。输出函数必须返回类型cstring。对于NULL值不会调用输出函数。 receive_function 可选参数。将数据从类型的外部二进制形式转换成内部形式的函数名。 如果没有该函数,该类型不能参与到二进制输入中。二进制表达转换成内部形式代价更低,然而却更容易移植(例如,标准的整数数据类型使用网络字节序作为外部二进制表达,而内部表达是机器本地的字节序)。receive_function应该执行足够的检查以确保该值是有效的。 接收函数可以被声明为有一个internal类型的参数,或者有三个类型分别为internal、oid、integer的参数。 internal参数是一个指向StringInfo缓冲区的指针,其中保存着接收到的字节串。 oid和integer参数和文本输入函数的相同。 接收函数必须返回一个该数据类型本身的值。通常,一个接收函数应该被声明为STRICT。如果不是这样,在读到一个NULL输入值时调用接收函数时第一个参数会是NULL。在这种情况下,该函数必须仍然返回NULL,除非接收函数发生了错误(这种情况主要是想支持域接收函数,域接收函数可能需要拒绝NULL输入)。 send_function 可选参数。将数据从类型的内部形式转换为外部二进制形式的函数名。 如果没有该函数,该类型将不能参与到二进制输出中。发送函数必须被声明为有一个新数据类型的参数。发送函数必须返回类型bytea。对于NULL值不会调用发送函数。 type_modifier_input_function 可选参数。将类型的修饰符数组转换为内部形式的函数名。 type_modifier_output_function 可选参数。将类型的修饰符的内部形式转换为外部文本形式的函数名。 如果该类型支持修饰符(附加在类型声明上的可选约束,例如,char(5)或numeric(30,2)),则需要可选的type_modifier_input_function以及type_modifier_output_function。 GaussDB (DWS)允许用户定义的类型有一个或者多个简单常量或者标识符作为修饰符。不过,为了存储在系统目录中,该信息必须能被打包到一个非负整数值中。所声明的修饰符会被以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。 analyze_function 可选参数。为该数据类型执行统计分析的函数名的可选参数。 默认情况下,如果该类型有一个默认的B-tree操作符类,ANALYZE将尝试用类型的“equals”和“less-than”操作符来收集统计信息。这种行为对于非标量类型并不合适,因此可以通过指定一个自定义分析函数来覆盖这种行为。分析函数必须被声明为有一个类型为internal的参数,并且返回一个boolean结果。 internallength 可选参数。一个数字常量,用于指定新类型的内部表达的字节长度。默认为变长。 虽然只有I/O函数和其他为该类型创建的函数才知道新类型的内部表达的细节, 但是内部表达的一些属性必须被向GaussDB(DWS)声明。其中最重要的是internallength。基本数据类型可以是定长的(这种情况下internallength是一个正整数)或者是变长的(把internallength设置为VARIABLE,在内部通过把typlen设置为-1表示)。所有变长类型的内部表达都必须以一个4字节整数开始,internallength定义了总长度。 PASSEDBYVALUE 可选参数。表示这种数据类型的值需要被传值而不是传引用。传值的类型必须是定长的,并且它们的内部表达不能超过Datum类型(某些机器上是4字节,其他机器上是8字节)的尺寸。 alignment 可选参数。该参数指定数据类型的存储对齐需求。如果被指定,必须是char、int2、int4或者double。默认是int4。 允许的值等同于以1、2、4或8字节边界对齐。要注意变长类型的alignment参数必须至少为4,因为它们需要包含一个int4作为它们的第一个组成部分。 storage 可选参数。该数据类型的存储策略。 如果被指定,必须是plain、external、extended或者main。 默认是plain。 plain指定该类型的数据将总是被存储在线内并且不会被压缩。(对定长类型只允许plain) extended指定系统将首先尝试压缩一个长的数据值,并且将在数据仍然太长的情况下把值移出主表行。 external允许值被移出主表, 但是系统将不会尝试对它进行压缩。 main允许压缩,但是不鼓励把值移出主表(如果没有其他办法让行的大小变得合适,具有这种存储策略的数据项仍将被移出主表,但比起extended以及external项来,这种存储策略的数据项会被优先考虑保留在主表中)。 除plain之外所有的storage值都暗示该数据类型的函数能处理被TOAST过的值。指定的值仅仅是决定一种可TOAST数据类型的列的默认TOAST存储策略,用户可以使用ALTER TABLE SET STORAGE为列选取其他策略。 like_type 可选参数。与新类型具有相同表达的现有数据类型的名称。会从这个类型中复制internallength、 passedbyvalue、 alignment以及storage的值( 除非在这个CREATE TYPE命令的其他地方用显式说明覆盖)。 当新类型的低层实现是以一种现有的类型为参考时,用这种方式指定表达特别有用。 category 可选参数。这种类型的分类码(一个ASCII 字符)。 默认是“用户定义类型”的'U'。为了创建自定义分类, 也可以选择其他ASCII字符。 preferred 可选参数。如果这种类型是其类型分类中的优先类型则为TRUE,否则为FALSE。默认为FALSE。在一个现有类型分类中创建一种新的优先类型要非常谨慎, 因为这可能会导致很大的改变。 category和preferred参数可以被用来帮助控制在混淆的情况下应用哪一种隐式造型。每一种数据类型都属于一个用单个ASCII 字符命名的分类,并且每一种类型可以是其所属分类中的“首选”。当有助于解决重载函数或操作符时,解析器将优先造型到首选类型(但是只能从同类的其他类型造型)。对于没有隐式转换到或来自任意其他类型的类型,让这些设置保持默认即可。不过,对于有隐式转换的相关类型的组,把它们都标记为属于同一个类别并且选择一种或两种“最常用”的类型作为该类别的首选通常是很有用的。在把一种用户定义的类型增加到一个现有的内建类别(例如,数字或者字符串类型)中时,category参数特别有用。不过,也可以创建新的全部是用户定义类型的类别。对这样的类别,可选择除大写字母之外的任何ASCII字符。 default 可选参数。数据类型的默认值。如果被省略,默认值是空。 如果用户希望该数据类型的列被默认为某种非空值,可以指定一个默认值。默认值可以用DEFAULT关键词指定(这样一个默认值可以被附加到一个特定列的显式DEFAULT子句覆盖)。 element 可选参数。被创建的类型是一个数组,element指定了数组元素的类型。例如,要定义一个4字节整数的数组(int4), 应指定ELEMENT = int4。 delimiter 可选参数。指定这种类型组成的数组中分隔值的定界符。 可以把delimiter设置为一个特定字符,默认的定界符是逗号(,)。注意定界符是与数组元素类型相关的,而不是数组类型本身相关。 collatable 可选参数。如果这个类型的操作可以使用排序规则信息,则为TRUE。默认为FALSE。 如果collatable为TRUE,这种类型的列定义和表达式可能通过使用COLLATE子句携带有排序规则信息。在该类型上操作的函数的实现负责真正利用这些信息,仅把类型标记为可排序的并不会让它们自动地去使用这类信息。 label 可选参数。与枚举类型的一个值相关的文本标签,其值为长度不超过64个字符的非空字符串。 在创建用户定义类型的时候, GaussDB(DWS)会自动创建一个与之关联的数组类型,其名字由该元素类型的名字前缀一个下划线组成。
  • 功能描述 在当前数据库中定义一种新的数据类型。定义数据类型的用户将成为该数据类型的拥有者。类型只适用于行存表 有四种形式的CREATE TYPE,分别为:复合类型、基本类型、shell类型和枚举类型。 复合类型 复合类型由一个属性名和数据类型的列表指定。如果属性的数据类型是可排序的,也可以指定该属性的排序规则。复合类型本质上和表的行类型相同,但是如果只想定义一种类型,使用CREATE TYPE避免了创建一个实际的表。单独的复合类型也是很有用的,例如可以作为函数的参数或者返回类型。 为了能够创建复合类型,必须拥有在其所有属性类型上的USAGE特权。 基本类型 用户可以自定义一种新的基本类型(标量类型)。通常来说这些函数必须是用C或者另外一种低层语言所编写。 shell类型 shell类型是一种用于后面要定义的类型的占位符,通过发出一个只带类型名参数的CREATE TYPE命令来创建该类型。在创建基本类型时,需要shell类型作为一种向前引用。 枚举类型 由若干个标签构成的列表,每一个标签值都是一个非空字符串,且字符串长度必须不超过64个字节。
  • 注意事项 Hudi当前不支持使用char、varchar、tinyint、smallint类型,建议使用string或int类型。 Hudi当前只有int、bigint、float、double、decimal、string、date、timestamp、boolean、binary类型支持设置默认值。 Hudi表必须指定primaryKey与preCombineField。 在指定路径下创建表时,如果路径下已存在Hudi表,则建表时不需要指定列。
  • 示例 创建非分区表 create table if not exists hudi_table0 ( id int, name string, price double ) using hudi options ( type = 'cow', primaryKey = 'id', preCombineField = 'price' ); 创建分区表 create table if not exists hudi_table_p0 ( id bigint, name string, ts bigint, dt string, hh string ) using hudi options ( type = 'cow', primaryKey = 'id', preCombineField = 'ts' ) partitioned by (dt, hh); 在指定路径下创建表 create table if not exists h3( id bigint, name string, price double ) using hudi options ( primaryKey = 'id', preCombineField = 'price' ) location '/path/to/hudi/h3';
  • 参数描述 表1 CREATE TABLE参数描述 参数 描述 database_name Database名称,由字母、数字和下划线(_)组成。 table_name Database中的表名,由字母、数字和下划线(_)组成。 columnTypeList 以逗号分隔的带数据类型的列表。列名由字母、数字和下划线(_)组成。 using 参数hudi,定义和创建Hudi table。 table_comment 表的描述信息。 location_path HDFS路径,指定该路径Hudi表会创建为外表。 options_list Hudi table属性列表。
  • 参数说明 复合类型 name 要创建的类型的名称(可以被模式限定)。 attribute_name 复合类型的一个属性(列)的名称。 data_type 要成为复合类型的一个列的现有数据类型的名称。 collation 要关联到复合类型的一列的现有排序规则的名称。 基本类型 自定义基本类型时,参数可以以任意顺序出现,input_function和output_function为必选参数,其它为可选参数。 input_function 将数据从类型的外部文本形式转换为内部形式的函数名。 输入函数可以被声明为有一个cstring类型的参数,或者有三个类型分别为cstring、oid、integer的参数。 cstring参数是以C字符串存在的输入文本。 oid参数是该类型自身的OID(对于数组类型则是其元素类型的OID)。 integer参数是目标列的typmod(如果知道,不知道则将传递-1)。 输入函数必须返回一个该数据类型本身的值。通常,一个输入函数应该被声明为STRICT。如果不是这样,在读到一个NULL输入值时,调用输入函数时第一个参数会是NULL。在这种情况下,该函数必须仍然返回NULL,除非调用函数发生了错误(这种情况主要是想支持域输入函数,域输入函数可能需要拒绝NULL输入)。 输入和输出函数能被声明为具有新类型的结果或参数是因为:必须在创建新类型之前创建这两个函数。而新类型应该首先被定义为一种shell type,它是一种占位符类型,除了名称和拥有者之外它没有其他属性。这可以通过不带额外参数的命令CREATE TYPE name做到。然后用C写的I/O函数可以被定义为引用这种shell type。最后,用带有完整定义的CREATE TYPE把该shell type替换为一个完全的、合法的类型定义,之后新类型就可以正常使用了。 output_function 将数据从类型的内部形式转换为外部文本形式的函数名。 输出函数必须被声明为有一个新数据类型的参数。输出函数必须返回类型cstring。对于NULL值不会调用输出函数。 receive_function 可选参数。将数据从类型的外部二进制形式转换成内部形式的函数名。 如果没有该函数,该类型不能参与到二进制输入中。二进制表达转换成内部形式代价更低,然而却更容易移植(例如,标准的整数数据类型使用网络字节序作为外部二进制表达,而内部表达是机器本地的字节序)。receive_function应该执行足够的检查以确保该值是有效的。 接收函数可以被声明为有一个internal类型的参数,或者有三个类型分别为internal、oid、integer的参数。 internal参数是一个指向StringInfo缓冲区的指针,其中保存着接收到的字节串。 oid和integer参数和文本输入函数的相同。 接收函数必须返回一个该数据类型本身的值。通常,一个接收函数应该被声明为STRICT。如果不是这样,在读到一个NULL输入值时调用接收函数时第一个参数会是NULL。在这种情况下,该函数必须仍然返回NULL,除非接收函数发生了错误(这种情况主要是想支持域接收函数,域接收函数可能需要拒绝NULL输入)。 send_function 可选参数。将数据从类型的内部形式转换为外部二进制形式的函数名。 如果没有该函数,该类型将不能参与到二进制输出中。发送函数必须被声明为有一个新数据类型的参数。发送函数必须返回类型bytea。对于NULL值不会调用发送函数。 type_modifier_input_function 可选参数。将类型的修饰符数组转换为内部形式的函数名。 type_modifier_output_function 可选参数。将类型的修饰符的内部形式转换为外部文本形式的函数名。 如果该类型支持修饰符(附加在类型声明上的可选约束,例如char(5)或numeric(30,2)),则需要可选的type_modifier_input_function以及type_modifier_output_function。GaussDB(DWS)允许用户定义的类型有一个或者多个简单常量或者标识符作为修饰符。不过,为了存储在系统目录中,该信息必须能被打包到一个非负整数值中。所声明的修饰符会被以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。 analyze_function 可选参数。为该数据类型执行统计分析的函数名的可选参数。 默认情况下,如果该类型有一个默认的B-tree操作符类,ANALYZE将尝试用类型的“equals”和“less-than”操作符来收集统计信息。这种行为对于非标量类型并不合适,因此可以通过指定一个自定义分析函数来覆盖这种行为。分析函数必须被声明为有一个类型为internal的参数,并且返回一个boolean结果。 internallength 可选参数。一个数字常量,用于指定新类型的内部表达的字节长度。默认为变长。 虽然只有I/O函数和其他为该类型创建的函数才知道新类型的内部表达的细节,但是内部表达的一些属性必须被向GaussDB(DWS)声明。其中最重要的是internallength。基本数据类型可以是定长的(这种情况下internallength是一个正整数)或者是变长的(把internallength设置为VARIABLE,在内部通过把typlen设置为-1表示)。所有变长类型的内部表达都必须以一个4字节整数开始,internallength定义了总长度。 PASSEDBYVALUE 可选参数。表示这种数据类型的值需要被传值而不是传引用。传值的类型必须是定长的,并且它们的内部表达不能超过Datum类型(某些机器上是4字节,其他机器上是8字节)的尺寸。 alignment 可选参数。该参数指定数据类型的存储对齐需求。如果被指定,必须是char、int2、int4或者double。默认是int4。 允许的值等同于以1、2、4或8字节边界对齐。要注意变长类型的alignment参数必须至少为4,因为它们需要包含一个int4作为它们的第一个组成部分。 storage 可选参数。该数据类型的存储策略。 如果被指定,必须是plain、external、extended或者main。默认是plain。 plain指定该类型的数据将总是被存储在线内并且不会被压缩。(对定长类型只允许plain) extended指定系统将首先尝试压缩一个长的数据值,并且将在数据仍然太长的情况下把值移出主表行。 external允许值被移出主表,但是系统将不会尝试对它进行压缩。 main允许压缩,但是不鼓励把值移出主表(如果没有其他办法让行的大小变得合适,具有这种存储策略的数据项仍将被移出主表,但比起extended以及external项来,这种存储策略的数据项会被优先考虑保留在主表中)。 除plain之外所有的storage值都暗示该数据类型的函数能处理被TOAST过的值。指定的值仅决定一种可TOAST数据类型的列的默认TOAST存储策略,用户可以使用ALTER TABLE SET STORAGE为列选取其他策略。 like_type 可选参数。与新类型具有相同表达的现有数据类型的名称。会从这个类型中复制internallength、passedbyvalue、alignment以及storage的值( 除非在这个CREATE TYPE命令的其他地方用显式说明覆盖)。 当新类型的低层实现是以一种现有的类型为参考时,用这种方式指定表达特别有用。 category 可选参数。这种类型的分类码(一个ASCII字符)。默认是“用户定义类型”的'U'。为了创建自定义分类, 也可以选择其他ASCII字符。 preferred 可选参数。如果这种类型是其类型分类中的优先类型则为TRUE,否则为FALSE。默认为FALSE。在一个现有类型分类中创建一种新的优先类型要非常谨慎,因为这可能会导致很大的改变。 category和preferred参数可以被用来帮助控制在混淆的情况下应用哪一种隐式造型。每一种数据类型都属于一个用单个ASCII字符命名的分类,并且每一种类型可以是其所属分类中的“首选”。当有助于解决重载函数或操作符时,解析器将优先造型到首选类型(但是只能从同类的其他类型造型)。对于没有隐式转换到或来自任意其他类型的类型,让这些设置保持默认即可。不过,对于有隐式转换的相关类型的组,把它们都标记为属于同一个类别并且选择一种或两种“最常用”的类型作为该类别的首选通常是很有用的。在把一种用户定义的类型增加到一个现有的内建类别(例如,数字或者字符串类型)中时,category参数特别有用。不过,也可以创建新的全部是用户定义类型的类别。对这样的类别,可选择除大写字母之外的任何ASCII字符。 default 可选参数。数据类型的默认值。如果被省略,默认值是空。 如果用户希望该数据类型的列被默认为某种非空值,可以指定一个默认值。默认值可以用DEFAULT关键词指定(这样一个默认值可以被附加到一个特定列的显式DEFAULT子句覆盖)。 element 可选参数。被创建的类型是一个数组,element指定了数组元素的类型。例如,要定义一个4字节整数的数组(int4),应指定ELEMENT = int4。 delimiter 可选参数。指定这种类型组成的数组中分隔值的定界符。 可以把delimiter设置为一个特定字符,默认的定界符是逗号(,)。注意定界符是与数组元素类型相关的,而不是数组类型本身相关。 collatable 可选参数。如果这个类型的操作可以使用排序规则信息,则为TRUE。默认为FALSE。 如果collatable为TRUE,这种类型的列定义和表达式可能通过使用COLLATE子句携带有排序规则信息。在该类型上操作的函数的实现负责真正利用这些信息,仅把类型标记为可排序的并不会让它们自动地去使用这类信息。 label 可选参数。与枚举类型的一个值相关的文本标签,其值为长度不超过64个字符的非空字符串。 在创建用户定义类型的时候,GaussDB(DWS)会自动创建一个与之关联的数组类型,其名字由该元素类型的名字前缀一个下划线组成。
  • 语法格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 CREATE TYPE name AS ( [ attribute_name data_type [ COLLATE collation ] [, ... ] ] ) 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 CREATE TYPE name AS ENUM ( [ 'label' [, ... ] ] )
  • 功能描述 在当前数据库中定义一种新的数据类型。定义数据类型的用户将成为该数据类型的拥有者。类型只适用于行存表。 有四种形式的CREATE TYPE,分别为:复合类型、基本类型、shell类型和枚举类型。 复合类型 复合类型由一个属性名和数据类型的列表指定。如果属性的数据类型是可排序的,也可以指定该属性的排序规则。复合类型本质上和表的行类型相同,但是如果只想定义一种类型,使用CREATE TYPE避免了创建一个实际的表。单独的复合类型也是很有用的,例如可以作为函数的参数或者返回类型。 为了能够创建复合类型,必须拥有在其所有属性类型上的USAGE特权。 基本类型 用户可以自定义一种新的基本类型(标量类型)。通常来说这些函数必须是用C或者另外一种低层语言所编写。 shell类型 shell类型是一种用于后面要定义的类型的占位符,通过发出一个只带类型名参数的CREATE TYPE命令来创建该类型。在创建基本类型时,需要shell类型作为一种向前引用。 枚举类型 由若干个标签构成的列表,每一个标签值都是一个非空字符串,且字符串长度必须不超过64个字节。
  • 示例 创建一个Ispell词典english_ispell(词典定义文件来自开源词典): 1 2 3 4 5 6 7 CREATE TEXT SEARCH DICTIONARY english_ispell ( TEMPLATE = ispell, DictFile = english, AffFile = english, StopWords = english, FilePath = 'obs://bucket_name/path accesskey=ak secretkey=sk region=rg' ); 请参见配置示例一节的示例。
  • 参数说明 name 要创建的词典的名称(可指定模式名,否则在当前模式下创建)。 取值范围:符合标识符命名规范的字符串,且最大长度不超过63个字符。 template 模板名。 取值范围:系统表PG_TS_TEMPLATE中定义的模板:Simple/Synonym/Thesaurus/Ispell/Snowball。 option 参数名。与template值对应,不同的词典模板具有不同的参数列表,且与指定顺序无关。 Simple词典对应的option STOPWORDS 停用词表文件名,默认后缀名为stop。例如STOPWORDS = french,则实际文件名为french.stop。停用词文件格式为一组word列表,每行定义一个停用词。词典处理时,文件中的空行和空格会被忽略,并将stopword词组转换为小写形式。 ACCEPT 是否将非停用词设置为已识别。默认值为true。 当Simple词典设置参数ACCEPT=true时,将不会传递任何token给后继词典,此时建议将其放置在词典列表的最后。反之,当ACCEPT=false时,建议将该Simple词典放置在列表中的至少一个词典之前。 FILEPATH 停用词文件所在目录。停用词文件可以存放于本地,也可以存放于 对象存储服务 OBS服务器。如果存在本地,目录格式为'file://absolute_path'。如果存放于OBS服务器,目录格式为'obs://bucket/path accesskey=ak secretkey=sk region=region_name'。注意目录要用单引号包含。默认值为预定义词典文件所在目录。FILEPATH参数必须和STOPWORDS参数同时指定,不允许单独指定。 使用OBS服务器上的停用词文件创建字典的过程如下: 将停用词文件上传到OBS服务器。例如将french.stop文件上传到OBS服务器obsv3.sa-fb-1.externaldemo.com上名为gaussdb的桶中,其URL为https://gaussdb.obsv3.sa-fb-1.externaldemo.com/french.stop。上传文件及查询URL的方式请参考OBS用户手册。 修改$GAUSSHOME/etc/region_map文件,在其中加入一行"region_name": "obs domain"。region_name可以为任意由大小写字母、数字、斜杠(/)或下划线组成的字符串。obs domain为OBS服务器的 域名 。 示例,将region_name设为rg,region_map包含的内容如:"rg": "obsv3.sa-fb-1.externaldemo.com"。 region_name和obs domain都用双引号,冒号的左边没有空格,右边有1个空格。 执行CREATE TEXT SEARCH DICTIONARY 命令创建字典。命令如下: 1 CREATE TEXT SEARCH DICTIONARY french_dict ( TEMPLATE = pg_catalog.simple, STOPWORDS = french, FILEPATH = 'obs://gaussdb accesskey=xxx secretkey=yyy region=rg' ); 由于french.stop文件放在gaussdb桶的根目录下,因此path为空。 Synonym词典对应的option SYNONYM 同义词词典的定义文件名,默认后缀名为syn。 文件格式为一组同义词列表,每行格式为"token synonym",即token和其对应的synonym,中间以空格相连。 CASESENSITIVE 设置是否大小写敏感,默认值为false,此时词典文件中的token和synonym均会转为小写形式处理。如果设置为true,则不会进行小写转换。 FILEPATH 同义词词典文件所在目录。目录可以指定为本地目录和OBS目录两种形式。默认值为预定义词典文件所在目录。其中目录格式、以及使用OBS服务器上的文件创建Synonym字典的过程与Simple词典的FILEPATH相同。 Thesaurus词典对应的option DICTFILE 词典定义文件名,默认后缀名为ths。 文件格式为一组同义词列表,每行格式为"sample words : indexed words",中间冒号(:)作为短语和其替换词间的分隔符。TZ词典处理时,如果有多个匹配的sample words,将选择最长匹配输出。 DICTIONARY 用于词规范化的子词典名,必须且仅能定义一个。该词典必须是已经存在的,在检查短语匹配之前使用,用于识别和规范输入文本。 如果子词典无法识别输入词,将会报错。此时,需要移除该词或者更新子词典使其识别。此外,可在indexed words的开头放上一个星号(*)来跳过在其上应用子词典,但是所有sample words必须可以被子词典识别。 如果词典文件定义的sample words中,含有子词典中定义的停用词,需要用问号(?)替代停用词。假设a和the是子词典中所定义的停用词,如下: ? one ? two : swsw 上述同义词组定义会匹配"a one the two"以及"the one a two",这两个短语均会被swsw替代输出。 FILEPATH 词典定义文件所在目录。目录可以指定为本地目录和OBS目录两种形式。默认值为预定义词典文件所在目录。其中目录格式、以及使用OBS服务器上的文件创建Synonym字典的过程与Simple词典的FILEPATH相同。 Ispell词典 DICTFILE 词典定义文件名,默认后缀名为dict。 AFFFILE 词缀文件名,默认后缀名为affix。 STOPWORDS 停用词文件名,默认后缀名为stop,文件格式要求与Simple类型词典的停用词文件相同。 FILEPATH 词典文件所在目录。可以指定为本地目录和OBS目录两种形式。默认值为预定义词典文件所在目录。其中目录格式、以及使用OBS服务器上的文件创建Synonym字典的过程与Simple词典的FILEPATH相同。 Snowball词典 LANGUAGE 语言名,标识使用哪种语言的词干分析算法。算法按照对应语言中的拼写规则,缩减输入词的常见变体形式为一个基础词或词干。 STOPWORDS 停用词表文件名,默认后缀名为stop,文件格式要求与Simple类型词典的停用词文件相同。 FILEPATH 词典定义文件所在目录。可以指定为本地目录或者OBS目录。默认值为预定义词典文件所在目录。FILEPATH参数必须和STOPWORDS参数同时指定,不允许单独指定。其中目录格式、以及用OBS服务器上的文件创建Snowball字典的过程与Simple字典相同。 预定义词典文件位于$GAUSSHOME/share/postgresql/tsearch_data目录下。 词典定义文件的文件名仅支持小写字母、数字、下划线混合。 value 参数值。如果不是简单的标识符或数字,则参数值必须加单引号(标识符和数字同样可以加上单引号)。
  • 参数说明 name 要创建的词典的名称(可指定模式名,否则在当前模式下创建)。 取值范围:符合标识符命名规范的字符串,且最大长度不超过63个字符。 template 模板名。 取值范围:系统表PG_TS_TEMPLATE中定义的模板:Simple/Synonym/Thesaurus/Ispell/Snowball。 option 参数名。与template值对应,不同的词典模板具有不同的参数列表,且与指定顺序无关。 Simple词典对应的option STOPWORDS 停用词表文件名,默认后缀名为stop。例如STOPWORDS = french,则实际文件名为french.stop。停用词文件格式为一组word列表,每行定义一个停用词。词典处理时,文件中的空行和空格会被忽略,并将stopword词组转换为小写形式。 ACCEPT 是否将非停用词设置为已识别。默认值为true。 当Simple词典设置参数ACCEPT=true时,将不会传递任何token给后继词典,此时建议将其放置在词典列表的最后。反之,当ACCEPT=false时,建议将该Simple词典放置在列表中的至少一个词典之前。 FILEPATH 停用词文件所在目录。停用词文件可以存放于本地,也可以存放于对象存储服务OBS服务器。如果存在本地,目录格式为'file://absolute_path'。如果存放于OBS服务器,目录格式为'obs://bucket/path accesskey=ak secretkey=sk region=region_name'。注意目录要用单引号包含。默认值为预定义词典文件所在目录。FILEPATH参数必须和STOPWORDS参数同时指定,不允许单独指定。 使用OBS服务器上的停用词文件创建字典的过程如下: 将停用词文件上传到OBS服务器。例如将french.stop文件上传到OBS服务器obsv3.sa-fb-1.externaldemo.com上名为gaussdb的桶中,其URL为https://gaussdb.obsv3.sa-fb-1.externaldemo.com/french.stop。上传文件及查询URL的方式请参考OBS用户手册。 修改$GAUSSHOME/etc/region_map文件,在其中加入一行"region_name": "obs domain"。region_name可以为任意由大小写字母、数字、斜杠(/)或下划线组成的字符串。obs domain为OBS服务器的域名。 示例,将region_name设为rg,region_map包含的内容如:"rg": "obsv3.sa-fb-1.externaldemo.com"。 region_name和obs domain都用双引号,冒号的左边没有空格,右边有1个空格。 执行CREATE TEXT SEARCH DICTIONARY命令创建字典。命令如下: 1 CREATE TEXT SEARCH DICTIONARY french_dict ( TEMPLATE = pg_catalog.simple, STOPWORDS = french, FILEPATH = 'obs://gaussdb accesskey=xxx secretkey=yyy region=rg' ); 由于french.stop文件放在gaussdb桶的根目录下,因此path为空。 Synonym词典对应的option SYNONYM 同义词词典的定义文件名,默认后缀名为syn。 文件格式为一组同义词列表,每行格式为"token synonym",即token和其对应的synonym,中间以空格相连。 CASESENSITIVE 设置是否大小写敏感,默认值为false,此时词典文件中的token和synonym均会转为小写形式处理。如果设置为true,则不会进行小写转换。 FILEPATH 同义词词典文件所在目录。目录可以指定为本地目录和OBS目录两种形式。默认值为预定义词典文件所在目录。其中目录格式、以及使用OBS服务器上的文件创建Synonym字典的过程与Simple词典的FILEPATH相同。 Thesaurus词典对应的option DICTFILE 词典定义文件名,默认后缀名为ths。 文件格式为一组同义词列表,每行格式为"sample words : indexed words",中间冒号(:)作为短语和其替换词间的分隔符。TZ词典处理时,如果有多个匹配的sample words,将选择最长匹配输出。 DICTIONARY 用于词规范化的子词典名,必须且仅能定义一个。该词典必须是已经存在的,在检查短语匹配之前使用,用于识别和规范输入文本。 如果子词典无法识别输入词,将会报错。此时,需要移除该词或者更新子词典使其识别。此外,可在indexed words的开头放上一个星号(*)来跳过在其上应用子词典,但是所有sample words必须可以被子词典识别。 如果词典文件定义的sample words中,含有子词典中定义的停用词,需要用问号(?)替代停用词。假设a和the是子词典中所定义的停用词,如下: ? one ? two : swsw 上述同义词组定义会匹配"a one the two"以及"the one a two",这两个短语均会被swsw替代输出。 FILEPATH 词典定义文件所在目录。目录可以指定为本地目录和OBS目录两种形式。默认值为预定义词典文件所在目录。其中目录格式、以及使用OBS服务器上的文件创建Synonym字典的过程与Simple词典的FILEPATH相同。 Ispell词典 DICTFILE 词典定义文件名,默认后缀名为dict。 AFFFILE 词缀文件名,默认后缀名为affix。 STOPWORDS 停用词文件名,默认后缀名为stop,文件格式要求与Simple类型词典的停用词文件相同。 FILEPATH 词典文件所在目录。可以指定为本地目录和OBS目录两种形式。默认值为预定义词典文件所在目录。其中目录格式、以及使用OBS服务器上的文件创建Synonym字典的过程与Simple词典的FILEPATH相同。 Snowball词典 LANGUAGE 语言名,标识使用哪种语言的词干分析算法。算法按照对应语言中的拼写规则,缩减输入词的常见变体形式为一个基础词或词干。 STOPWORDS 停用词表文件名,默认后缀名为stop,文件格式要求与Simple类型词典的停用词文件相同。 FILEPATH 词典定义文件所在目录。可以指定为本地目录或者OBS目录。默认值为预定义词典文件所在目录。FILEPATH参数必须和STOPWORDS参数同时指定,不允许单独指定。其中目录格式、以及用OBS服务器上的文件创建Snowball字典的过程与Simple字典相同。 预定义词典文件位于$GAUSSHOME/share/postgresql/tsearch_data目录下。 词典定义文件的文件名仅支持小写字母、数字、下划线混合。 value 参数值。如果不是简单的标识符或数字,则参数值必须加单引号(标示符和数字同样可以加上单引号)。
  • 示例 创建一个Ispell词典english_ispell(词典定义文件来自开源词典): 认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 1 2 3 4 5 6 7 8 DROP TEXT SEARCH DICTIONARY IF EXISTS english_ispell; CREATE TEXT SEARCH DICTIONARY english_ispell ( TEMPLATE = ispell, DictFile = english, AffFile = english, StopWords = english, FilePath = 'obs://bucket_name/path accesskey=ak secretkey=sk region=rg' ); 创建一个Snowball词典english_snowball(词典定义文件来自开源词典): 认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 1 2 3 4 5 6 7 DROP TEXT SEARCH DICTIONARY IF EXISTS english_snowball; CREATE TEXT SEARCH DICTIONARY english_snowball ( TEMPLATE = snowball, Language = english, StopWords = english, FilePath = 'obs://bucket_name/path accesskey=ak secretkey=sk region=rg' );
  • 表操作示例 重命名表: 1 ALTER TABLE CUSTOMER RENAME TO CUSTOMER_t; 给表增加一个新的约束: 1 ALTER TABLE customer_address ADD PRIMARY KEY(ca_address_sk); 根据已有唯一索引为表增加主键约束或唯一约束。 先给表CUSTOMER创建唯一索引CUSTOMER_constraint1,然后根据已有唯一索引增加主键约束,并对前面创建的索引rename: 1 2 CREATE UNIQUE INDEX CUSTOMER_constraint1 ON CUSTOMER(C_CUSTKEY); ALTER TABLE CUSTOMER ADD CONSTRAINT CUSTOMER_constraint2 PRIMARY KEY USING INDEX CUSTOMER_constraint1; 重命名表约束: 1 ALTER TABLE CUSTOMER RENAME CONSTRAINT CUSTOMER_constraint2 TO CUSTOMER_constraint; 删除表约束: 1 ALTER TABLE CUSTOMER DROP CONSTRAINT CUSTOMER_constraint; 给表增加一个索引: 1 ALTER TABLE CUSTOMER ADD INDEX CUSTOMER_index(C_CUSTKEY); 删除表索引: 1 2 ALTER TABLE CUSTOMER DROP INDEX CUSTOMER_index; ALTER TABLE CUSTOMER DROP KEY CUSTOMER_index; 向在一个列存表中添加局部聚簇列: 1 ALTER TABLE customer_address ADD CONSTRAINT customer_address_cluster PARTIAL CLUSTER KEY(ca_address_sk); 删除一个列存表中的局部聚簇列: 1 ALTER TABLE customer_address DROP CONSTRAINT customer_address_cluster; 切换列存表的存储格式: 1 ALTER TABLE customer_address SET (COLVERSION = 1.0); 修改表的分布方式: 1 ALTER TABLE customer_address DISTRIBUTE BY REPLICATION; 修改表模式: 1 ALTER TABLE customer_address SET SCHEMA tpcds; 单表冷热切换: 1 ALTER TABLE cold_hot_table REFRESH STORAGE; 列存分区表修改为冷热表: 1 2 3 4 5 6 7 CREATE table test_1(id int,d_time date) WITH(ORIENTATION=COLUMN) DISTRIBUTE BY HASH (id) PARTITION BY RANGE (d_time) (PARTITION p1 START('2022-01-01') END('2022-01-31') EVERY(interval '1 day')) ALTER TABLE test_1 SET (storage_policy = 'LMT:100');
  • 参数说明 IF EXISTS 如果不存在相同名称的表,不会抛出一个错误,而会发出一个通知,告知表不存在。 table_name [*] | ONLY table_name | ONLY ( table_name ) table_name是需要修改的表名。 若声明了ONLY选项,则只有那个表被更改。若未声明ONLY,该表及其所有子表都将会被更改。另外,可以在表名称后面显示地增加*选项来指定包括子表,即表示所有后代表都被扫描,这是默认行为。 constraint_name 约束的名字。约束名长度不超过63个字符。 index_name 索引名称。 storage_parameter 表的存储参数的名字。 分区管理新增的两个选项: PERIOD(interval类型) 设置分区管理中自动创建分区的周期。 PERIOD的范围要求以及开启该功能的约束请参考▪PERIOD。 在建表时,如果没有设置该参数,可以通过set的方式添加该参数,并开启自动创建分区功能;如果之前已经设置该参数,则通过set的方式修改该参数。 用户可以通过reset该参数的方式关闭自动创建分区功能,但是在自动删除分区功能存在的情况下,不支持关闭自动创建分区功能。 TTL(interval类型) 设置分区管理中自动删除分区的分区过期时间。 TTL的范围要求以及开启该功能的约束请参考▪TTL。 在建表时,如果没有设置该参数,可以通过set的方式添加该参数,并开启自动删除分区功能;如果之前已经设置该参数,则通过set的方式修改该参数。 用户可以通过reset该参数的方式关闭自动删除分区功能。 new_owner 表所属新的拥有者的名字。 new_tablespace 表所属新的表空间名字。 column_name,column_1_name, column_2_name 现存的或新字段的名称。 data_type 新字段的类型,或者现存字段的新类型。 compress_mode 表字段的压缩可选项,当前仅对行存表有效。该子句指定该字段优先使用的压缩算法。 collation 字段排序规则名称。可选字段COLLATE指定了新字段的排序规则,如果省略,排序规则为新字段的默认类型。 USING expression USING子句声明如何从旧的字段值里计算新的字段值;如果省略,缺省从旧类型向新类型的赋值转换。如果从旧数据类型到新类型没有隐含或者赋值的转换,则必须提供一个USING子句。 ALTER TYPE的USING选项实际上可以声明涉及该行旧值的任何表达式,即它可以引用除了正在被转换的字段之外其他的字段。这样,就可以用ALTER TYPE语法做非常普遍性的转换。因为这个灵活性,USING表达式并没有作用于该字段的缺省值(如果有的话),结果可能不是缺省表达式要求的常量表达式。这就意味着如果从旧类型到新类型没有隐含或者赋值转换的话,即使存在USING子句,ALTER TYPE也可能无法把缺省值转换成新的类型。在这种情况下,应该用DROP DEFAULT先删除缺省,执行ALTER TYPE,然后使用SET DEFAULT增加一个合适的新缺省值。类似的考虑也适用于涉及该字段的索引和约束。 NOT NULL | NULL 设置列是否允许空值。 integer 带符号的整数常值。当使用PERCENT时表示按照表数据的百分比收集统计信息,integer的取值范围为0-100。 attribute_option 属性选项。 PLAIN | EXTERNAL | EXTENDED | MAIN 字段存储模式。 PLAIN必须用于定长的数值(比如integer)并且是内联的、不压缩的。 MAIN用于内联、可压缩的数据。 EXTERNAL用于外部保存、不压缩的数据。使用EXTERNAL将令在text和bytea字段上的子字符串操作更快,但付出的代价是增加了存储空间。 EXTENDED用于外部的压缩数据,EXTENDED是大多数支持非PLAIN存储的数据的缺省。 CHECK ( expression ) 每次将要插入的新行或者将要被更新的行必须使表达式结果为真才能成功,否则会抛出一个异常并且不会修改数据库。 声明为字段约束的检查约束应该只引用该字段的数值,而在表约束里出现的表达式可以引用多个字段。 目前,CHECK表达式不能包含子查询也不能引用除当前行字段之外的变量。 DEFAULT default_expr 给字段指定缺省值。 缺省表达式的数据类型必须和字段类型匹配。 缺省表达式将被用于任何未声明该字段数值的插入操作。如果没有指定缺省值则缺省值为NULL 。 default_expr中若使用后缀操作符(如!),需使用括号括起来。 UNIQUE [ NULLS [ NOT ] DISTINCT | NULLS IGNORE ] index_parameters UNIQUE ( column_name [, ... ] ) [ NULLS [ NOT ] DISTINCT | NULLS IGNORE ] index_parameters UNIQUE约束表示表里的一个或多个字段的组合必须在全表范围内唯一。 其中[ NULLS [ NOT ] DISTINCT | NULLS IGNORE ]字段用来指定Unique唯一索引中索引列NULL值的处理方式。 默认取值:该参数默认取值为空,即NULL值可重复插入。 在对插入的新数据和表中原始数据进行列的等值比较时,对于NULL值有以下三种处理方式: NULLS DISTINCT:NULL值互不相等,即NULL值可重复插入。 NULLS NOT DISTINCT:NULL值相等。若索引列全为NULL,则NULL值不可重复插入;部分索引列为NULL,只有非NULL值不相等,才可成功插入数据。 NULLS IGNORE:在等值比较时跳过NULL值。若索引列全为NULL,则NULL值可重复插入;部分索引列为NULL,只有非NULL值不相等,才可成功插入数据。 三种处理方式具体的行为如下表所示: 表1 唯一索引中索引列NULL值的处理方式 字段控制 索引列全为NULL 部分索引列为NULL NULLS DISTINCT 可重复插入 可重复插入 NULLS NOT DISTINCT 不可重复插入 非NULL值相等,不可插入;非NULL值不相等,则插入成功 NULLS IGNORE 可重复插入 非NULL值相等,不可插入;非NULL值不相等,则插入成功 PRIMARY KEY index_parameters PRIMARY KEY ( column_name [, ... ] ) index_parameters 主键约束表明表中的一个或者一些字段只能包含唯一(不重复)的非NULL值。 DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE 设置该约束是否可推迟,列存暂不支持。 DEFERRABLE:可以推迟到事务结尾使用SET CONSTRAINTS命令检查。 NOT DEFERRABLE:在每条命令之后马上检查。 INITIALLY IMMEDIATE:那么每条语句之后就立即检查它。 INITIALLY DEFERRED:只有在事务结尾才检查它。 WITH ( {storage_parameter = value} [, ... ] ) 为表或索引指定一个可选的存储参数。 COMPRESS|NOCOMPRESS NOCOMPRESS:如果指定关键字NOCOMPRESS则不会修改表的现有压缩特性。 COMPRESS:如果指定COMPRESS关键字,则对该表进行批量插入元组时触发该特性。 new_table_name 修改后新的表名称。 new_column_name 表中指定列修改后新的列名称。 new_constraint_name 修改后表约束的新名称。 new_schema 修改后新的模式名称。 CASCADE 级联删除依赖于被依赖字段或者约束的对象(比如引用该字段的视图)。 RESTRICT 如果字段或者约束还有任何依赖的对象,则拒绝删除该字段。这是缺省行为。 schema_name 表所在的模式名称。