前言

前几天碰到同事咨询一个有关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. 如何避免FOUC

    如何避免FOUC FOUC即无样式内容闪烁也可以称为文档样式短暂失效,主要就是指HTML已加载而样式表并未加载,此后样式表再加载而产生的闪烁现象. 样式表前置 根据浏览器渲染的顺序,将CSS在< ...

  2. Uniapp+Nodejs实现外卖App项目1-项目介绍

    项目介绍 本项目采用uniapp和nodejs(数据接口).mongodb等技术实现了一个类似美团外卖的简易APP.项目主要目的是为了快速上手,如何快速使用uniapp开发一个app项目,同时掌握一些 ...

  3. eclipse项目右击找不到build path

    右击项目–>properties–>Project Facets–>勾选右侧的Java,然后保存. 此时再操作就有了.

  4. sql题目---day39

    # 1.查询所有的课程的名称以及对应的任课老师姓名 #where select teacher.tname,course.cname from teacher,course where course. ...

  5. 记一次酣畅淋漓的 K8s Ingress 排错过程(302,404,503,...)

    故事开始 第 1 关:[流量重定向到 /] 第 2 关:[应用返回 302,重定向到 /,引入 503 错误] 第 3 关:[静态资源访问遇到 503 问题] 第 4 关:[静态资源访问遇到 403 ...

  6. 【Azure 服务总线】如何批量删除Azure Service Bus中的Topics(数量较多,需要过滤后批量删除)

    问题描述 Azure Service Bus 的门户操作页面上,是否可以批量删除其中的Topics呢? 问题解答 Azure Service Bus门户或Service Bus Explorer工具没 ...

  7. Android\C++\C#\Java

    关于:(38条消息) 千万不能错过的Android NDK下载安装及配置_石子君的博客-CSDN博客_android ndk下载 (38条消息) Android扩展知识 - so文件生成及其使用_L- ...

  8. Java 客户信息管理软件 (面向对象 封装 总结)

    1 package com.bytezero.cim.bean; 2 3 /** 4 * 5 * @Description Customer为实体对象,用来封装客户信息 6 * @author Byt ...

  9. Lucene轻量级搜索引擎,真的太强了!!!Solr 和 ES 都是基于它

    一.基础知识 1.Lucene 是什么 Lucene 是一个本地全文搜索引擎,Solr 和 ElasticSearch 都是基于 Lucene 的封装 Lucene 适合那种轻量级的全文搜索,我就是服 ...

  10. 摆脱鼠标系列 - 浏览器操作 - Vimium C 插件 f 显示链接字母 jk上下移动

    为什么 摆脱鼠标系列 - 浏览器操作 - Vimium C 插件 f 显示链接字母 jk上下移动 百度搜索资料的时候,争取少用鼠标 关闭当前页签 x 左边页签 J 右边页签 K 搜索 /关键字回车 n