今天在开发环境上维护一个序列时,由于命名不规范,带来维护上的难度问题,简单的来看下今天遇到的问题。
遇到的问题
库中的一个奇特序列
1 |
[pg92@redhatB ~]$ psql francs francs |
备注:注意序列 “public”.”seq_log_op_logininfo”, 这个命名非常奇特,我们起初目标是将这个序列的 schema 转换成 francs。
尝试更改序列的 schema
1 |
francs=> alter schema "public"."seq_log_op_logininfo" set schema francs; |
备注:遇到错误,接着往下看。
无法引用,也无法删除
1 |
francs=> /ds "public"."seq_log_op_logininfo" |
备注:可见直接引用序列 “public”.”seq_log_op_logininfo” 是行不通的,这个问题困扰了我些许时间,因为我一直想通过 OID 删除它,快下班了,一时也想不到办法。后来在回家的路上,突然想到了一个非常简单的方法。
处理过程
dump DDL
1 |
[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 中,找到如下代码
1 |
CREATE SEQUENCE """public"".""seq_log_op_logininfo""" |
备注:原来这个序列需要这样引用: “””public””.””seq_log_op_logininfo”””
接着尝试:
1 |
francs=> /ds """public"".""seq_log_op_logininfo""" |
备注:终于可以查看这个序列了。
2.4 更改序列 schema
1 |
francs=> alter sequence """public"".""seq_log_op_logininfo""" set schema francs; |
删除序列
1 |
francs=> drop sequence """public"".""seq_log_op_logininfo"""; |
备注:一切正常。
总结
这是开发环境上遇到的一个问题,至于这个序列如何生成的不得而知,但有一点是需要明白的,在 PostgreSQL 中创建对像时应尽量不使用双引号,这会带来管理上的难度。
原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/237951.html