Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2945407
  • 博文数量: 199
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 4126
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-06 19:06
个人简介

半个PostgreSQL DBA,热衷于数据库相关的技术。我的ppt分享https://pan.baidu.com/s/1eRQsdAa https://github.com/chenhuajun https://chenhuajun.github.io

文章分类

全部博文(199)

文章存档

2020年(5)

2019年(1)

2018年(12)

2017年(23)

2016年(43)

2015年(51)

2014年(27)

2013年(21)

2011年(1)

2010年(4)

2009年(5)

2008年(6)

分类: Mysql/postgreSQL

2013-09-17 01:49:48

今天遇到个Case。PG7.3的dump数据在PG8.1上恢复。结果报错。就像下面这样:

psql  mydb ...
ERROR:  invalid type name "tb1.id%TYPE"
CONTEXT:  compile of PL/pgSQL function "myfunc" near line 7

我没有那个dump文件,根据错误消息判断原因应该这样的:
函数myfunc的定义中引用了"tb1.id%TYPE",但在db.sql中表tb1的定义语句在函数myfunc定义的后面,导致创建myfunc函数的SQL语句执行失败。

我试图在我自己的环境(PG9.2)再现这个问题,结果dump文件中表定义真的可能出现在函数定义的后面,但是恢复时却成功了。后来发现原来PG9.2的pg_dump生成的dump文件开头有下面一个参数设置,
check_function_bodies = false

通过这个参数可以在恢复时忽略函数定义的检查,也就回避了函数定义对表定义(或其他定义)依赖的问题。再查一下手册,PG7.3中没有这个参数,所以可以确定PG7.3生成的dump文件中没有设置check_function_bodies,因此就有可能出现函数定义在恢复时失败的问题。



阅读(2786) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~