注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

Postgresql 建表大小写问题  

2010-08-23 19:42:15|  分类: Postgres基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

今天被Postgresql 耍了一下午,其实是个表名大小写问题,好再后来终于明白了;
今天应用有个需求,需要从生产库导部分数据到测试库,其中生产库中有几张表
比较特殊,表名中含有大写字母和小写字母,然后通过 pg_dump 导表一直报表
不存在,以下模拟下今天的情况, 这里表名用 TesT_1 代替。

--以 postgis 用户登陆 postgis 库
psql -d postgis -U posgis

--创建一张测试表 "TesT_1"
postgis=> create table TesT_1 as select * from pg_tables;
SELECT
postgis=> \d
               List of relations
 Schema  |       Name        | Type  |  Owner  
---------+-------------------+-------+----------
 postgis | test_1            | table | postgis

说明:奇怪,明明创建的表名为 TesT_1,  PG默认转换为小写了。
 
--再次创建测试表 TesT_1
postgis=> drop table test_1;
DROP TABLE

postgis=> create table "TesT_1" as select * from pg_tables;
SELECT

postgis=> \d
               List of relations
 Schema  |       Name        | Type  |  Owner  
---------+-------------------+-------+----------
 postgis | TesT_1            | table | postgis


表名加了双引号后,果然创建了张表名为 TesT_1的表

-- 利用pg_dump 导出表 ,导出脚本如下,一直报表不存在;
[postgres@pgb dump]$ pg_dump -t TesT_1  -U postgis  postgis > 1.out
pg_dump: No matching tables were found

--加上schema前缀也不行
[postgres@pgb dump]$ pg_dump -t  postgis.TesT_1   postgis > 1.out
pg_dump: No matching tables were found

--后来psql连接到库
psql -d postgis -U posgis

--查看库中 postgis有哪些表
postgis=> \d
               List of relations
 Schema  |       Name        | Type  |  Owner  
---------+-------------------+-------+----------
 postgis | TesT_1            | table | postgis
 
-- \d 查看表结构,报表不存在
postgis-> \d Test_1;
Did not find any relation named "Test_1".

--表名加下双引号才行
postgis-> \d "Test_1"
Did not find any relation named ""Test_1"".

postgis-> \d "TesT_1"
      Table "postgis.TesT_1"
   Column    |  Type   | Modifiers
-------------+---------+-----------
 schemaname  | name    |
 tablename   | name    |
 tableowner  | name    |
 tablespace  | name    |
 hasindexes  | boolean |
 hasrules    | boolean |
 hastriggers | boolean |
 
从而想到,可能是PG默认只读小写,当遇到含有大写字母的表时,就读不到了;
于是在 pb_dump中,表名加个双引号就行;

--加双引号还不行
[postgres@pgb dump]$ pg_dump -t  "TesT_1" -U postgis  postgis > 1.out
pg_dump: No matching tables were found

--后来在师傅的提示下,加上转义符 \ 才行
[postgres@pgb dump]$ pg_dump -t  \"TesT_1\" -U postgis  postgis > 1.out

PS : 到了这里,问题终于解决了,真是无语了,PG里表名会区分大小写,
SQL语句会自动转换为小写。

  评论这张
 
阅读(28485)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016