前言

前几天碰到同事咨询一个有关sys_dump导出时,表名为大小写混合情况的报错问题。因为sys_dump命令运行在linux操作系统上,所以这涉及到linux中shell的语法格式问题。

下面模拟测试一下

1,大小写敏感环境和不敏感环境建表的区别,以及表在数据字典中存储方式的区别。

2,sys_dump导出时表名为大小写混合时的格式问题

测试版本:

KingbaseES V008R006C006B0013

1、表名为大小写混合

表名大小写混合情况,需要区分大小写,无论create table ,select ..from table 等sql语句都需要在表名增加双引号:

TEST=# show enable_ci ;
enable_ci
-----------
on
(1 row) TEST=# create table dD (id int );
CREATE TABLE TEST=# \dt
List of relations
Schema | Name | Type | Owner
--------+-------------+-------+--------
public | dd | table | system 数据字典表的relname仍然是小写,说明创建表不加双引号,表名被装换成小写存入数据字典
TEST=# select relname from pg_class where relname='dd';
relname
---------
dd
(1 row) TEST=# select relname from pg_class where relname='dD';
relname
---------
(0 rows)
表名大小写混合加入双引号创建成功
create table "gD" (id int ); TEST=# \dt
List of relations
Schema | Name | Type | Owner
--------+-------------+-------+--------
public | dd | table | system
public | ddfg | table | system
public | gD | table | system 数据字典表记录relname是大小写混合方式
TEST=# select relname from pg_class where relname='gD';
relname
---------
gD
(1 row) select语句涉及的表名要和sys_class里的relname一致。如果建表时指定表名为大小写混合需要双引号“gD”,那么select 语句中表名也需要加双引号“gD”
TEST=# select * from "gD";
id
----
(0 rows) TEST=# select * from 'gD';
错误: 语法错误 在 "'gD'" 或附近的
LINE 1: select * from 'gD';

大小写敏感与不敏感环境中,表名在数据字典中的存储方式:

大小写敏感环境:TEST=# show enable_ci ;
enable_ci
-----------
off
(1 row)
可以同时创建表名为小写和大小写混合的情况,例如:
TEST=# select relname from sys_class where relname='gD'or relname='gd';
relname
---------
gD
gd
(2 rows)
大小写不敏环境:
TEST=# show enable_ci ;
enable_ci
-----------
on
(1 row)
数据字典里存了表名Ag,不允许再创建小写表ag,即无论表名为ag,Ag,AG只能创建其中一个表,而不能同时存在三张表名为小写,大写,大小写混合的表
TEST=# \d Ag
Table "public.Ag"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | | TEST=# create table ag(id int);
ERROR: relation "ag" already exists
TEST=#
TEST=# select relname from sys_class where relname='ag'
TEST-# ;
relname
---------
Ag
(1 row) TEST=# create table AG(id int);
ERROR: relation "AG" already exists test=# create table ag(id int);
ERROR: relation "ag" already exists

2、sys_dump 导出表名为大小写混合时的格式问题

insert into "hGF" select generate_series(1,800);

TEST=# \d+ "hGF"
Table "public.hGF"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
--------+---------+-----------+----------+---------+---------+--------------+-------------
id | integer | | | | plain | |
Access method: heap sys_dump -t "hGF"表名大小写混合时会报错。 [kingbase2@localhost V8]$ sys_dump -U system -d test -p 2920 -FC -t "hGF" -f /opt/Kingbase/ES/V8/dd1.dmp
sys_dump: error: no matching tables were found 改写成
sys_dump -U system -d test -p 2920 -FC -t "\"hGF\"" -f /opt/Kingbase/ES/V8/db1.dmp

sys_dump -U system -d test -p 2920 -FC -t '"hGF"' -f /opt/Kingbase/ES/V8/db2.dmp shell中单引号内表示一个字符串,由于双引号有特殊含义,表示变量,需要转义符。

总结

1、表名为大小写混合情况,需要区分大小写,无论create table ,select ..from table 等sql语句都需要在表名增加双引号,以便表名以大小写方式存入系统表。

2、大小写敏感环境,表名可以同时以大写,小写,大小写混合方式存入系统表。

大小写不敏感环境,无论表名为大写,小写,大小写混合,只能将表名以其中一种方式存入系统表。

3、sys_dump 语法涉及表名时,注意shell对于双引号有特殊含义,需要加入转义符,或者使用单引号写法。

表名大小写混合时格式问题及sys_dump导出时的注意事项的更多相关文章

  1. Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题

      (转载)Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题   这几天在用spring boot开发项目, 在开发的过程中遇到一个问题hibernate在执 ...

  2. MySQL--区分表名大小写

    ============================================================================ 在MySQL中,可以通过lower_case_ ...

  3. [转]mysql在windows下支持表名大小写,lower_case_table_names

    windows下mysql默认是不支表名大小写的,也就是表名大小写不敏感.用phpmyadmin创建的驼峰式表名,全部被强制成小写.mysql表名大小写敏感的参数: lower_case_table_ ...

  4. mysql在windows下支持表名大小写,lower_case_table_names

    windows下mysql默认是不支表名大小写的,也就是表名大小写不敏感.用phpmyadmin创建的驼峰式表名,全部被强制成小写.mysql表名大小写敏感的参数: lower_case_table_ ...

  5. Mysql更改表名大小写不敏感

    编辑配置文件 vi /etc/my.cnf 在[mysqld]后添加添加 lower_case_table_names=1 重启服务 service mysqld stop service mysql ...

  6. mysql 数据库表名大小写问题

    lower_case_table_names=1 原来Linux下的MySQL默认是区分表名大小写的,通过如下设置,可以让MySQL不区分表名大小写:1.用root登录,修改 /usr/my.cnf: ...

  7. docker mysql 数据持久化到本地、设置不区别表名大小写-清风柳絮-51CTO博客

    原文:docker mysql 数据持久化到本地.设置不区别表名大小写-清风柳絮-51CTO博客 Docker MySQL 把数据存储在本地目录,很简单,只需要映射本地目录到容器即可 1.加上-v参数 ...

  8. docker安装MySQL8,目录挂载、配置用户名密码、忽略表名大小写、连接数、特殊字符、时区

    原文:docker安装MySQL8,目录挂载.配置用户名密码.忽略表名大小写.连接数.特殊字符.时区 一.环境配置 1.系统:centos7.3 2.docker版本:Docker version 1 ...

  9. docker mysql镜像忽略表名大小写

    原文:docker mysql镜像忽略表名大小写 1.安装mysql镜像 docker pull mysql/mysql-server 2.运行mysql docker run --net=host ...

  10. 设置centos7中的mysql5.7不区分表名大小写有关操作

    1.#which mysqld          //查看mysql的命令路径 /usr/sbin/mysqld 2.#/usr/sbin/mysqld --verbose --help | grep ...

随机推荐

  1. win32 - 使用GDI+播放gif图片

    今天做case的时候遇到一个这样的问题,故记录下来. Codeproject有类似的案例,不过是使用的MFC模板编译的. 因为我们只需要win32程序,所以就....代码如下: CodeProject ...

  2. CSS font-weight

    主要理解UI给得英文名 对应得数值 字体粗细:'font-weight'属性名称: font-weight取值: normal | bold | bolder | lighter | 100 | 20 ...

  3. mac环境下安装python3的requests包

    大家知道,mac环境默认安装的都是python2,自己装好python3之后,怎么使用pip来安装到python3下的包呢? 解决方法:pip3 install requests

  4. You can't specify target table for update in FROM clause

    mysql中You can't specify target table for update in FROM clause错误的意思是说,不能先select出同一表中的某些值,再update这个表( ...

  5. 【Azure 云服务】Azure Cloud Service 关于虚拟机资源,杀毒软件配置,补丁机制的问答

    一:云服务后端是2台虚拟机,Work Role,Web Role,可以RDP进去,但是为什么在虚拟机列表里看不到呢? 因为云服务(经典)是PaaS服务,有别于传统的IaaS服务,其提供的WebRole ...

  6. goland快键键防忘

    环境: debian下的goland 2018实测: 鼠标button2 == 鼠标中键 光标移动: 跳转光标到刚才的位置: ctrl+win+alt+左/右 按词左右移动光标: ctrl + 左/右 ...

  7. Volatile关键字原理

    转载请标明:https://www.cnblogs.com/tangZH/p/15113505.html 一.如果一个变量被volatile关键字修饰,那么所有线程都是可见的.所谓可见就是,当一条线程 ...

  8. linux基本知识汇总2(系统编程) 60000字汇总

    /////////////进程/任务 -- task任何启动并运行程序的行为,都是由操作系统帮助我们将程序转换成进程 -- 进程:完成特定的任务 进程控制块:PCB(win) / task_struc ...

  9. Java 手动抛异常

    1 package com.bytezero.throwable; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 impor ...

  10. Java toString的使用

    1 package com.bytezreo.objectclass; 2 3 import java.util.Date; 4 5 /** 6 * 7 * @Description Object类中 ...