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

PostgreSQL 中文网

 
 
 

日志

 
 

PostgreSQL:序列无法删除一例  

2013-04-11 20:40:58|  分类: PG案例分析 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


        今天在开发环境上维护一个序列时,由于命名不规范,带来维护上的难度问题,简单的来看下
今天遇到的问题。

一 遇到的问题
--1.1 库中的一个奇特序列
 [pg92@redhatB ~]$ psql francs francs
psql (9.2.1)
Type "help" for help.

francs=> \ds
                      List of relations
 Schema |              Name               |   Type   | Owner  
--------+---------------------------------+----------+--------
 francs | seq_test_1                      | sequence | francs
 public | "public"."seq_log_op_logininfo" | sequence | francs
(2 rows) 
     备注:注意序列 "public"."seq_log_op_logininfo", 这个命名非常奇特,我们起初目标是将这个
                序列的 schema 转换成 francs。
        
--1.2 尝试更改序列的 schema
 francs=> alter schema "public"."seq_log_op_logininfo" set schema francs;
ERROR:  syntax error at or near "."
LINE 1: alter schema "public"."seq_log_op_logininfo" set schema fran...
  备注:遇到错误,接着往下看。                      

--1.3 无法引用,也无法删除
 francs=> \ds "public"."seq_log_op_logininfo"
No matching relations found.

francs=> drop sequence "public"."seq_log_op_logininfo";
ERROR:  sequence "seq_log_op_logininfo" does not exist
  备注:可见直接引用序列 "public"."seq_log_op_logininfo" 是行不通的,这个问题困扰了我些许时间,
            因为我一直想通过 OID 删除它,快下班了,一时也想不到办法。后来在回家的路上,突然想到了
            一个非常简单的方法。

二 处理过程
--2.1 dump DDL
 [pg92@redhatB tf]$ pg_dump -h 127.0.0.1 -E UTF8 -s -v francs > francs.ddl
   备注:导出 francs 库的表结构到文件 francs.ddl ,然后在文件 francs.ddl 看看这个序列到底是如何
           表示的。
        
--2.2 在文件 francs.ddl 中,找到如下代码
 CREATE SEQUENCE """public"".""seq_log_op_logininfo"""
    START WITH 1600
    INCREMENT BY 1
    NO MINVALUE
    MAXVALUE 99999999999999999
    CACHE 20;

ALTER TABLE public."""public"".""seq_log_op_logininfo""" OWNER TO francs;   
  备注:原来这个序列需要这样引用: """public"".""seq_log_op_logininfo"""
   
--2.3 接着尝试:
 francs=> \ds """public"".""seq_log_op_logininfo"""
                      List of relations
 Schema |              Name               |   Type   | Owner  
--------+---------------------------------+----------+--------
 public | "public"."seq_log_op_logininfo" | sequence | francs
(1 row)
  备注:终于可以查看这个序列了。

--2.4 更改序列 schema
 francs=> alter sequence """public"".""seq_log_op_logininfo""" set schema francs;
ALTER SEQUENCE

francs=> \ds
                      List of relations
 Schema |              Name               |   Type   | Owner  
--------+---------------------------------+----------+--------
 francs | "public"."seq_log_op_logininfo" | sequence | francs
 francs | seq_test_1                      | sequence | francs
(2 rows)
  

--2.5 删除序列
 francs=> drop sequence """public"".""seq_log_op_logininfo""";
DROP SEQUENCE  
  备注:一切正常。
   
   
三 总结:
           这是开发环境上遇到的一个问题,至于这个序列如何生成的不得而知,但有一点是需要明白的,
     在 PostgreSQL 中创建对像时应尽量不使用双引号,这会带来管理上的难度。 
     
  评论这张
 
阅读(8223)| 评论(3)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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