VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

MySQL兼容性参数

本文对Vastbase G100兼容MySQL支持的特性参数进行了详细描述,用户可以通过设置特性参数,实现对应功能。

lower_case_column_names

参数说明

参数lower_case_column_names用于设置返回字段名是否大小写敏感。

该参数属于POSTMASTER类型参数,请参考重设参数表1中对应设置方法进行设置。

取值范围

  • 0:开启大小写敏感。默认值。
  • 1:关闭大小写敏感。

注意事项

  • 该功能仅在数据库兼容模式为MySQL时能够使用(即创建DB时DBCOMPATIBILITY='B'),在其他数据库兼容模式下不能使用该特性。

  • 支持版本:

    • Vastbase G100 V2.2 Build 10(Patch No.2)及以上补丁版本。

    • Vastbase G100 V2.2 Build 11及以上版本。

示例

1、修改数据库配置文件”postgresql.conf”中”lower_case_column_names”参数(0表示开启,1表示关闭,默认为0开启)。

lower_case_column_names=0

2、重启数据库实例。

3、创建并切换至兼容模式为MySQL的库db_mysql。

CREATE DATABASE db_mysql dbcompatibility='B';
\c db_mysql

4、创建测试表并插入数据。

create table test(id int,Home varchar);
insert into test values(1,2),(3,4);

5、查询数据库中字段名称。

select * from test;

结果返回如下,返回字段名中的大小写与建表时的写法相同:

 id | Home 
----+------  
  1 | 2  
  3 | 4
(2 rows)

6、再次向测试表插入数据,插入时指定字段名的写法大小写不敏感。

insert into test(HOme) values(5);

7、插入成功,查看测试表数据。

select * from test;

返回结果如下:

 id | Home
----+------
  1 | 2
  3 | 4
    | 5
(3 rows)

func_colname_with_args

参数说明

该参数用于控制函数返回结果的列名是否带参数列表,即返回结果的字段名称与查询语句中一致。

该参数属于USERSET类型参数,请参考重设参数表1中对应设置方法进行设置。

注意事项

该功能在数据库兼容模式为Oracle或者MySQL时能够使用(即创建DB时DBCOMPATIBILITY='A'或者'B'),在其他数据库兼容模式下不能使用该特性。

取值范围:布尔型

  • on:函数返回结果带参数。
  • off:函数返回结果不带参数。

默认值:off

示例

1、创建并切换至兼容模式为B的数据库。

CREATE DATABASE db_mysql DBCOMPATIBILITY 'B';
\c db_mysql

2、设置func_colname_with_args参数。

set func_colname_with_args=on;

3、执行函数查询。

select to_char(123) from dual;

返回结果为:

 to_char(123)
------------
 123
(1 row)

vastbase_sql_mode

参数说明

Vastbase在MySQL兼容模式下,支持使用GUC参数vastbase_sql_mode控制B兼容下的语法校验规则。

该参数属于USERSET类型参数,请参考重设参数表1中对应设置方法进行设置。

注意事项

  • 该功能仅在数据库兼容模式为MySQL时能够使用(即创建DB时DBCOMPATIBILITY='B'),在其他数据库兼容模式下不能使用该特性。
  • 从V2.2 Build 10(Patch No.2)开始,仅在MySQL兼容模式下校验此参数。在其他兼容模式下修改此参数值并不会报错,但修改不会生效。

取值范围

字符串,仅允许合法字符串设定。参数值由若干个配置项用逗号隔开构成。

  • 当前仅支持表1中的内容。

  • 同时配置多个选项时,相邻配置项用逗号隔开,例如:set vastbase_sql_mode='only_full_group_by,sql_mode_strict';

  • 若将此参数取值设为空字符串'',则表示不启用任何相关特性。

表1 vastbase_sql_mode取值范围

取值 说明 用法参考 数据库支持版本
ONLY_FULL_GROUP_BY 用于限制以下两种场景:
  • 出现在select列表中的列,一定要出现在group by子句中。
  • 出现在order by中的列,一定要出现在select distinct中。
  • SELECT V2.2 Build 10及以上版本
    SQL_MODE_STRICT 在为字段设置UNSIGNED属性后,限制插入的列值正负和长度。
    (涉及的类型有tinyint、smallint、int、integer、bigint、mediumint)
    COLUMN定义支持UNSIGNED属性 V2.2 Build 10(Patch No.9)及以上补丁版本
    ANSI_QUOTES 控制双引号引用的内容被解释为标识符还是字符串。 双引号解释为标识符
  • V2.2 Build 10(Patch No.11)及以上补丁版本
  • V2.2 Build 11及以上版本
  • pad_char_to_full_length 控制char类型查询时是否删除尾部空格。
  • 当pad_char_to_full_length打开,就表示char类型查询时尾部空格不会被删除。
  • 当pad_char_to_full_length关闭,就表示char类型查询时尾部空格会被删除。
  • - V2.2 Build 10(Patch No.16)及以上补丁版本
    error_for_division_by_zero 用于控制MySQL兼容模式下除以0时是否提示Warning信息。
    设置此选项时,表达式中除以0的操作将提示 WARNING: division by zero
    - V2.2 Build 10(Patch No.17)及以上补丁版本

    默认值

    only_full_group_by,ansi_quotes,pad_char_to_full_length,error_for_division_by_zero

    实际默认值与当前数据库的补丁版本有关,请关注表1中介绍的数据库版本支持情况。

    示例

    示例请参考表1中的“用法参考”。

    lower_case_table_names

    参数说明

    在MySQL兼容模式下,lower_case_table_names参数用于控制数据库返回对象名的大小写敏感性,对象包含schema名、表名、用户名、函数名等数据库对象名称。

    • 该功能仅在数据库兼容模式为MySQL时支持(即数据库实例初始化时指定DBCOMPATIBILITY='B')。
    • 在Vastbase G100 V2.2 Build 10(Patch No.9)及以后版本支持使用该参数控制对象名大小写敏感性,该参数仅支持在创建数据库时指定,数据库创建成功后不支持修改,从V2.2 Build 10(Patch No.15)补丁版本开始该参数支持修改。
    • 在配置文件$PGDATA/postgresql.conf中修改lower_case_table_names参数取值后应重启数据库,使修改生效。
    • 在主备集群的环境中,主备节点的lower_case_table_names参数的设置必须相同。
    • lower_case_table_names参数为0时,\df查看函数信息,函数名大小写敏感。

    该参数属于POSTMASTER类型参数,请参考重设参数表1中对应设置方法进行设置。

    • 若数据库中对象名大小写敏感(lower_case_table_names参数是0)情况下,存在不同对象名AA、Aa和aa,当修改参数设置对象名大小写不敏感(lower_case_table_names=1),则此时大小写敏感的对象AA和Aa将无法被识别。后续必须要重建这些对象,可参见示例3

    • 若要实现对象名大小写不敏感,则应在创建对象前指定参数取值为1。创建数据库、创建表之前(以及使用vb_dump和vb_dumpall -F p模式导出的SQL语句中包含有创建数据库和表的情况),必须先在实例级别指定参数lower_case_table_names=1,并确保参数已生效,确保后续创建的数据库和表的大小写不敏感。

    • 执行导出和导入操作之前,应确定前后的数据库大小写敏感的设置一致。若vb_dump导出的数据库对象名大小写不敏感,在使用vb_restore命令导入数据之前必须在导入实例指定lower_case_table_names=1,且确认生效,确保导出和导入前后的数据库大小写敏感的设置一致。

    取值范围

    • 0:对象名使用创建时的大小写样式保存,在比较判断时使用大小写敏感的方式。

    • 1:对象名统一使用小写样式保存,在比较判断时使用大小写不敏感的方式。

    默认值:0

    示例

    示例1: 设置表名大小写敏感。

    1、在配置文件$PGDATA/postgresql.conf中修改lower_case_table_names参数设置为0,即大小写敏感。并重启数据库。

    vi $PGDATA/postgresql.conf
    lower_case_table_names=0;
    
    vb_ctl restart
    

    2、连接数据库查看当前数据库下参数lower_case_table_names的值。

    show lower_case_table_names;
    

    返回结果为:

     lower_case_table_names
    ------------------------
     0
    (1 row)
    

    3、创建测试表table2。

    CREATE TABLE table2
    ( 
      id   INTEGER, 
     name  varchar(20)
    );
    

    4、向表TABLE2中插入数据。

    INSERT INTO TABLE2(id,name) VALUES (2, 'grace');
    

    插入失败,返回结果如下。

    ERROR:  relation "TABLE2" does not exist on node1
    

    示例2: 设置表名大小写不敏感。

    1、在配置文件$PGDATA/postgresql.conf中修改lower_case_table_names参数设置为1,即大小写不敏感。并重启数据库。

    vi $PGDATA/postgresql.conf
    lower_case_table_names=1
    
    vb_ctl restart
    

    2、连接数据库查看当前数据库下参数lower_case_table_names的值。

    show lower_case_table_names;
    

    返回结果为:

     lower_case_table_names
    ------------------------
     1
    (1 row)
    

    3、创建测试表table1。

    CREATE TABLE table1
    ( 
      id    INTEGER, 
     name   varchar(20)
    );  
    

    4、向表TABLE1中插入数据。

    INSERT INTO TABLE1(id,name) VALUES(1, 'jack');
    

    5、查看表TABLE1内容。

    select * from TABLE1;
    

    返回结果如下,表示数据插入成功,该数据库大小写不敏感。

     id | name
    ----+------
      1 | jack
    (1 row)
    

    示例3: 创建表后切换lower_case_table_names参数取值。

    1、在配置文件$PGDATA/postgresql.conf中修改lower_case_table_names参数设置为0,即大小写敏感。并重启数据库。

    vi $PGDATA/postgresql.conf
    lower_case_table_names=0
    
    vb_ctl restart
    

    2、查看当前数据库下参数lower_case_table_names的值。

    show lower_case_table_names;
    

    返回结果为:

     lower_case_table_names
    ------------------------
     0
    (1 row)
    

    3、创建大小写不同形式的测试表并为其插入数据,并查看当前参数取值下查询表数据的实际结果。

    create table test_1174016(col int);
    create table tesT_1174016(col int);
    create table TEST_1174016(col int);
    insert into test_1174016 values(0);
    insert into tesT_1174016 values(1);
    insert into TEST_1174016 values(2);
    
    select * from test_1174016;
    select * from tesT_1174016 ;
    select * from TEST_1174016 ;
    

    返回结果依次为如下:

     col
    -----
       0
    (1 row)
    
     col
    -----
       1
    (1 row)
    
     col
    -----
       2
    (1 row)
    

    4、在配置文件$PGDATA/postgresql.conf中修改lower_case_table_names参数设置为1,即大小写不敏感。并重启数据库。

    vi $PGDATA/postgresql.conf
    lower_case_table_names=1
    
    vb_ctl restart
    

    5、查看当前数据库下参数lower_case_table_names的值。

    show lower_case_table_names;
    

    返回结果为:

     lower_case_table_names
    ------------------------
     1
    (1 row)
    

    6、查询测试表数据。

    lower_case_table_names=0时创建的大小写敏感的table,在其参数取值被修改为1(即对象名大小写不敏感)之后,仅对象名为全小写的table可以被识别,其余将无法被识别。

    select * from test_1174016;
    select * from tesT_1174016 ;
    select * from TEST_1174016 ;
    

    返回结果依次为如下,即在大小写不敏感的情况下,以上语句的查询对象均为test_1174016测试表:

     col
    -----
       0
    (1 row)
    
     col
    -----
       0
    (1 row)
    
     col
    -----
       0
    (1 row)
    

    7、删除后重新创建测试表并插入数据,查询测试表数据。

    drop table TEST_1174016;
    create table TEST_1174016(col int);
    insert into TEST_1174016 values(3);
    
    select * from test_1174016;
    select * from tesT_1174016 ;
    select * from TEST_1174016 ;
    

    返回结果为如下,由于查询对象名大小写不敏感,所以上述查询语句的查询的对象均为步骤7中创建的测试表test_1174016。

     col
    -----
       3
    (1 row)
    
     col
    -----
       3
    (1 row)
    
     col
    -----
       3
    (1 row)
    

    8、恢复对象名大小写敏感。在配置文件$PGDATA/postgresql.conf中修改lower_case_table_names参数设置为0。并重启数据库。

    vi $PGDATA/postgresql.conf
    lower_case_table_names=0
    
    vb_ctl restart
    

    9、查看当前数据库下参数lower_case_table_names的值。

    show lower_case_table_names;
    

    返回结果为:

     lower_case_table_names
    ------------------------
     0
    (1 row)
    

    10、查询测试表数据。

    select * from test_1174016;
    select * from tesT_1174016 ;
    select * from TEST_1174016 ;
    

    返回结果为如下,在步骤3中创建的大小写敏感的测试表可以被查询到,且test_1174016表查询结果为重建后的数据:

     col
    -----
       3
    (1 row)
    
     col
    -----
       1
    (1 row)
    
     col
    -----
       2
    (1 row)
    

    b_compatibility_user_host_auth

    参数说明: 控制是否允许创建user@host'user'@'host'之类的用户并兼容MySQL的user@host认证鉴权。对兼容MySQL的user@host进行认证时,需要在配置文件postgresql.conf中设为on。

    该参数属于USERSET类型参数,请参考重设参数表1中对应设置方法进行设置。

    • MySQL在创建用户时会将用户名与主机名拼接成新的用户名,即user一致时,不同的host将被记录为多个用户。该参数与MySQL行为一致。

    • 当b_compatibility_user_host_auth与b_compatibility_user_host_ignore同时为on时,生效参数为b_compatibility_user_host_ignore。

    • 本参数仅在V2.2 Build 10 (Patch No.17)及以后版本支持。

    取值范围: 布尔型

    • on:开启该参数允许创建user@host'user'@'host'之类的用户并兼容MySQL的user@host认证鉴权。

    • off:关闭该参数不允许创建user@host'user'@'host'之类的用户并且不支持user@host认证鉴权。

    默认值: off

    b_compatibility_user_host_ignore

    参数说明: 控制是否允许创建user@host'user'@'host'之类的用户,该参数不对@host进行认证鉴权,user@host等同于user。

    • 如需对用户IP进行认证鉴权,可在pg_hba.conf中配置。

    • 本参数仅在V2.2 Build 10 (Patch No.17)及以后版本支持。

    取值范围: 布尔型

    • on:开启该参数允许创建user@host'user'@'host'之类的用户,并忽略对@host进行认证鉴权,user@host等同于user。

    • off:关闭该参数不允许创建user@host'user'@'host'之类的用户。

    默认值: off