表名大小写混合时格式问题及sys_dump导出时的注意事项
前言
前几天碰到同事咨询一个有关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导出时的注意事项的更多相关文章
- Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题
(转载)Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题 这几天在用spring boot开发项目, 在开发的过程中遇到一个问题hibernate在执 ...
- MySQL--区分表名大小写
============================================================================ 在MySQL中,可以通过lower_case_ ...
- [转]mysql在windows下支持表名大小写,lower_case_table_names
windows下mysql默认是不支表名大小写的,也就是表名大小写不敏感.用phpmyadmin创建的驼峰式表名,全部被强制成小写.mysql表名大小写敏感的参数: lower_case_table_ ...
- mysql在windows下支持表名大小写,lower_case_table_names
windows下mysql默认是不支表名大小写的,也就是表名大小写不敏感.用phpmyadmin创建的驼峰式表名,全部被强制成小写.mysql表名大小写敏感的参数: lower_case_table_ ...
- Mysql更改表名大小写不敏感
编辑配置文件 vi /etc/my.cnf 在[mysqld]后添加添加 lower_case_table_names=1 重启服务 service mysqld stop service mysql ...
- mysql 数据库表名大小写问题
lower_case_table_names=1 原来Linux下的MySQL默认是区分表名大小写的,通过如下设置,可以让MySQL不区分表名大小写:1.用root登录,修改 /usr/my.cnf: ...
- docker mysql 数据持久化到本地、设置不区别表名大小写-清风柳絮-51CTO博客
原文:docker mysql 数据持久化到本地.设置不区别表名大小写-清风柳絮-51CTO博客 Docker MySQL 把数据存储在本地目录,很简单,只需要映射本地目录到容器即可 1.加上-v参数 ...
- docker安装MySQL8,目录挂载、配置用户名密码、忽略表名大小写、连接数、特殊字符、时区
原文:docker安装MySQL8,目录挂载.配置用户名密码.忽略表名大小写.连接数.特殊字符.时区 一.环境配置 1.系统:centos7.3 2.docker版本:Docker version 1 ...
- docker mysql镜像忽略表名大小写
原文:docker mysql镜像忽略表名大小写 1.安装mysql镜像 docker pull mysql/mysql-server 2.运行mysql docker run --net=host ...
- 设置centos7中的mysql5.7不区分表名大小写有关操作
1.#which mysqld //查看mysql的命令路径 /usr/sbin/mysqld 2.#/usr/sbin/mysqld --verbose --help | grep ...
随机推荐
- cmp命令
cmp命令 cmp命令用来比较两个文件是否有差异,当相互比较的两个文件完全一样时,则该指令不会输出任何信息,若发现有差异,预设会标示出第一个不同之处的字符和列数编号,若不指定任何文件名称或是所给予的文 ...
- golang获取windows版本和详细信息
场景: 将木马丢到感染机运行后回连时希望返回感染机的操作系统信息.golang 可以通过runtime.OS获取到操作系统类型,但是无法获取详细的版本信息,如win7 win10等, 解决方案; 下面 ...
- 【Android 逆向】【攻防世界】easy-dex
这一题不easy,不知为何叫这个名字.... 1. apk 安装到手机,不知所云,各种亮瞎眼闪光 2. jadx 打开apk,一行java代码都没有,打开AndroidManifest看看 <? ...
- Qt开发技术:QCharts(二)QCharts折线图介绍、Demo以及代码详解
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- 正则计算器---day19
计算下面表达式最后的结果 strvar = "1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))& ...
- PicGo如何设置阿里云图床
打开阿里云官网.注册并且登录.然后产品下拉列表里面通过搜索或者直接找到存储.对象存储OSS 默认你已经激活了,然后进入到控制台里面. 注意事项 Bucket名称需要全英文,不能有大写字母 服务器选国内 ...
- 【Azure 媒体服务】AMS的Manifest文件中SmoothStreamingMedia片段中<c t="6161940" d="749970" r="2" n="0" />, c, t, d, r, n 的解析
问题描述 在Azure媒体服务(AMS: Azure Media Service)中,不管是点播,直播都需要下载manifest文件.而文件中有一段[<c t="6161940&quo ...
- EFCore之命令行工具
介绍 EFCore工具可帮助完成设计数据库时候的开发任务,主要用于通过对数据库架构进行反向工程来管理迁移和搭建DbContext和实体类型.EFCore .NET命令行工具是对跨平台.NET Core ...
- Mysql常用存储引擎以及区别?
InnoDB:是Mysql的默认存储引擎,支持事务.外键.如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新.删除操作,那么InnoDB存 ...
- 十: SQL执行流程
SQL执行流程 1. MySQL 中的 SQL执行流程 MySQL的查询流程: 1.1 查询缓存 Server 如果在查询缓存中发现了这条 SQL 语句,就会直接将结果返回给客户端:如果没 有,就进入 ...