GBASE 8C——SQL参考6 sql语法(7)

本文详细介绍了GBASE 8C中创建操作符类和操作符族的语法及用法,包括CREATE OPERATOR CLASS和CREATE OPERATOR FAMILY的参数说明和示例,帮助理解如何在数据库中定义自定义操作符策略和索引方法。
摘要由CSDN通过智能技术生成
  1. CREATE OPERATOR CLASS

功能描述

定义新的操作符类。

语法格式

CREATE OPERATOR CLASS name [ DEFAULT ] FOR TYPE data_type

  USING index_method [ FAMILY family_name ] AS

  {  OPERATOR strategy_number operator_name [ ( op_type, op_type ) ] [ FOR SEARCH | FOR ORDER BY sort_family_name ]

   | FUNCTION support_number [ ( op_type [ , op_type ] ) ] function_name ( argument_type [, ...] )

   | STORAGE storage_type

  } [, ... ]

参数说明

  1. name:新的操作符类名称,可以被模式修饰;
  2. DEFAULT:如果指定,则该操作符类将成为该数据类型的默认操作符类,每种特定的数据类型和索引最多有一个默认操作符类;
  3. data_type:这个操作符类所用于的列数据类型;
  4. index_method:这个操作符类所用于的索引方法的名称;
  5. family_name:要把这个操作符类加入其中的已有操作符族的名称,如果没有指定将使用一个同名操作符族,如果还不存在就创建一个;
  6. strategy_number:用于一个与该操作符类相关联的操作符的索引方法的策略编号;
  7. operator_name:一个与该操作符类相关联的操作符的名称,可以被模式修饰;
  8. op_type:表示该操作符的操作数数据类型;
  9. sort_family_name:现有btree操作符族的名称,可以被模式修饰;
  10. support_number:用于与该操作符类相关联的函数的索引方法支持过程编号;
  11. function_name:用于该操作符类的索引方法支持过程的函数名称,可以被模式修饰;
  12. argument_type:该函数的参数数据类型;
  13. storage_type:实际存储在索引中的数据类型

注意事项

OPERATOR、FUNCTION和STORAGE 子句可以以任何顺序出现。

范例

下面的例子为数据类型_int4(int4数组)定义了一个 GiST 索引操作符:

CREATE OPERATOR CLASS gist__int_ops

    DEFAULT FOR TYPE _int4 USING gist AS

        OPERATOR        3       &&,

        OPERATOR        6       = (anyarray, anyarray),

        OPERATOR        7       @>,

        OPERATOR        8       <@,

        OPERATOR        20      @@ (_int4, query_int),

        FUNCTION        1       g_int_consistent (internal, _int4, smallint, oid, internal),

        FUNCTION        2       g_int_union (internal, internal),

        FUNCTION        3       g_int_compress (internal),

        FUNCTION        4       g_int_decompress (internal),

        FUNCTION        5       g_int_penalty (internal, internal, internal),

        FUNCTION        6       g_int_picksplit (internal, internal),

        FUNCTION        7       g_int_same (_int4, _int4, internal);

语法兼容

CREATE OPERATOR CLASS是PostgreSQL扩展。

相关语法

ALTER OPERATOR CLASS, DROP OPERATOR CLASS, CREATE OPERATOR FAMILY, ALTER OPERATOR FAMILY, DROP OPERATOR FAMILY

  1. CREATE OPERATOR FAMILY

功能描述

定义新的操作符族。

语法格式

CREATE OPERATOR FAMILY name USING index_method

参数说明

  1. name:新的操作符族的名称,可以被模式修饰;
  2. index_method:操作符族所属的索引的名称。

注意事项

只有系统管理员用户有权限创建操作符族。

语法兼容

CREATE OPERATOR FAMILY是PostgreSQL扩展。

相关语法

ALTER OPERATOR FAMILY, DROP OPERATOR FAMILY, CREATE OPERATOR CLASS, ALTER OPERATOR CLASS, DROP OPERATOR CLASS

  1. CREATE POLICY

功能描述

对表创建行级安全性策略。

语法格式

CREATE POLICY name ON table_name

    [ AS { PERMISSIVE | RESTRICTIVE } ]

    [ FOR { ALL | SELECT | INSERT | UPDATE | DELETE } ]

    [ TO { role_name | PUBLIC | CURRENT_USER | SESSION_USER } [, ...] ]

    [ USING ( using_expression ) ]

    [ WITH CHECK ( check_expression ) ]

参数说明

  1. name:新建的安全性策略名称,同一个数据表上安全性策略名称不能相同;
  2. table_name:安全性策略的表名;
  3. PERMISSIVE:指定将策略创建为宽松策略,即将所有查询策略使用“OR”运算符组合在一起;
  4. RESTRICTIVE:指定将该策略创建为限制性策略,即将所有查询策略使用“AND”运算符组合在一起;
  5. command:该策略的命令,取值范围:ALL、SELECT、INSERT、UPDATE以及DELETE,缺省为ALL;
  6. role_name:该策略应用的角色,缺省为PUBLIC,将把策略应用到所有角色;
  7. using_expression:安全性策略控制的表达式,返回boolean值,该表达式不能包含任何聚集函数或窗口函数,在查询重写阶段,如果数据表的行访问控制开关打开,满足条件的表达式会添加到计划树中。针对数据表的每条元组,会进行表达式计算,只有表达式返回值为TRUE时,行数据对用户才可见(SELECT、UPDATE、DELETE);当表达式返回FALSE时,该元组对当前用户不可见,用户无法通过SELECT语句查看此元组,无法通过UPDATE语句更新此元组,无法通过DELETE语句删除此元组;
  8. check_expression:安全性策略控制的表达式,返回boolean值,该表达式不能包含任何聚集函数或窗口函数,在查询重写阶段,如果数据表的行访问控制开关打开,满足条件的表达式会添加到计划树中。针对数据表的每条元组,会进行表达式计算,只有表达式返回值为TRUE时,行数据对用户才可见(INSERT、UPDATE);当表达式返回FALSE或NULL时,会报错,注意check_expression是根据新内容而不是原始内容计算的。

针对每种命令的策略

  1. ALL:为一条策略使用ALL表示它将适用于所有命令,无论命令的类型如何;
  2. SELECT:为一条策略使用SELECT表示它将适用于SELECT查询,并且需要保持在约束关系上的SELECT权限;
  3. INSERT:为一条策略使用INSERT表示它适用于INSERT命令;
  4. UPDATE:为一条策略使用UPDATE表示它适用于 UPDATE、SELECT FOR UPDATE 和SELECT FOR SHARE命令,还有INSERT 命令的ON CONFLICT DO UPDATE子句;
  5. DELETE:为一条策略使用DELETE表示它适用于DELETE命令,只有通过这条策略的数据才能被DELETE;

注意事项

当不同命令类型的多个策略应用于相同命令时(例如,应用于UPDATE命令的SELECT和UPDATE策略),则用户必须拥有两种类型的权限。

当同一命令类型的多个策略应用于同一个命令时,必须至少有一个允许访问该关系的 PERMISSIVE策略,并且必须通过所有的RESTRICTIVE策略。

范例

CREATE TABLE test_r(id int, role varchar(100), data varchar(100));

CREATE TABLE

CREATE POLICY test_rls ON test_r USING(role = CURRENT_USER);

CREATE POLICY

语法兼容

CREATE POLICY是PostgreSQL扩展。

相关语法

ALTER POLICY, DROP POLICY, ALTER TABLE

  1. CREATE ROLE

功能描述

创建角色。

语法格式

CREATE ROLE name [ [ WITH ] option [ ... ] ]

where option可以是:

      SUPERUSER | NOSUPERUSER

    | CREATEDB | NOCREATEDB

    | CREATEROLE | NOCREATEROLE

    | INHERIT | NOINHERIT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值