前言

前几天碰到同事咨询一个有关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. ckeditor使用技巧总结

    介绍 官方开发者文档:CKEditor 4 documentation 技巧总结 1.挑选需要的插件,打包下载 参考:CKEditor 4.4.1 添加代码高亮显示插件功能--使用官方推荐Code S ...

  2. EasyExcel使用及自定义设置单元格样式

    EasyExcel使用及自定义设置单元格样式 https://www.cnblogs.com/Hizy/p/11825886.html easyexcel 自动设置列宽 https://www.man ...

  3. vscode中跑go test时打印详细信息配置

    1.文件>首选项>设置>搜索Test Flags 2.选择在settings.json中编辑 3.添加以下内容 "go.testFlags":[ "-v ...

  4. 【.Net Core】.Net Core 源码分析与深入理解 - 配置中心 Startup.cs (二)

    源码版本: .Net Core 3.1.14 上篇文章: [.Net Core].Net Core 源码分析与深入理解 - 入口 Program.cs (一) 注意:本篇文章主要研究的是 Startu ...

  5. .NET Core 集成微信支付签名错误

    .NET Core 集成微信支付签名错误 The provided data is tagged with 'Universal' class value '16', but it should ha ...

  6. 【生成对抗网络学习 其二】GAN(keras实现)代码阅读笔记

    想来想去还是记录一下吧,主要是怕以后时间长忘了 好记性不如烂笔头 代码来自eriklindernoren的开源GAN实现:https://github.com/eriklindernoren/Kera ...

  7. 用BootstrapBlazor制作修改订单字段的页面

    1.在Shared文件夹下新增一个razor 2.页面初始化的时候获取订单信息 准备一个名为OrderId的参数 准备重写页面初始化时的方法 改成异步的形式来重写 4.获取数据 就3行代码. 声明这个 ...

  8. 【Azure Redis 缓存】使用Azure Redis服务时候,如突然遇见异常,遇见命令Timeout performing SET xxxxxx等情况,如何第一时间查看是否有Failover存在呢?

    问题描述 使用Azure Redis服务时,如突然遇见异常,命令Timeout performing SET xxxxxx等情况,如何第一时间查看是否有Failover存在呢?看是否有进行平台的维护呢 ...

  9. 【Azure Redis 缓存】当使用Azure Redis 集群服务时候,发生了Moved的几点分析

    问题描述 当使用Azure Redis 集群服务时候,发生了Moved的几点分析 问题分析 1.   关于 Moved 问题,原因有可能是内存碎片整理,从而引起Redis发生failover. 2.  ...

  10. Huggingface初上手即ERNIE-gram句子相似性实战

    大模型如火如荼的今天,不学点语言模型(LM)相关的技术实在是说不过去了.只不过由于过往项目用到LM较少,所以学习也主要停留在直面--动眼不动手的水平.Huggingface(HF)也是现在搞LM离不开 ...