升级PostgreSQL数据库。函数会发生什么?

升级PostgreSQL数据库。函数会发生什么?,postgresql,upgrade,Postgresql,Upgrade,我有一个非常旧的PostgreSQL版本-8.3,我们想将其升级到8.4。这应该不难,但我担心在新版本中添加我自己编写的函数时会发生什么。例如,我编写了函数A(text),并在PostgreSQL 8.4中添加了名称和参数完全相同的函数。会发生什么?我的函数将被覆盖,我将遇到一些冲突,或者我的函数将是有效函数,PostgreSQL不会添加它自己的函数?所有内置函数都存储在架构pg\u目录中。您自己编写的所有函数都存储在不同的模式中(通常public) 由于识别函数的“主键”是模式和名称,因此函数

我有一个非常旧的PostgreSQL版本-8.3,我们想将其升级到8.4。这应该不难,但我担心在新版本中添加我自己编写的函数时会发生什么。例如,我编写了函数
A(text)
,并在PostgreSQL 8.4中添加了名称和参数完全相同的函数。会发生什么?我的函数将被覆盖,我将遇到一些冲突,或者我的函数将是有效函数,PostgreSQL不会添加它自己的函数?

所有内置函数都存储在架构
pg\u目录中。您自己编写的所有函数都存储在不同的模式中(通常
public


由于识别函数的“主键”是模式和名称,因此函数与任何内置函数之间没有冲突

为什么要从一个不受支持的版本“升级”到另一个不受支持的版本。如果你今天升级,你应该升级到10或者至少9.6。我得到的信息是,仅仅升级到8.4要容易得多。听说从恐龙8.3升级到9.6或10会引起问题。这是生产数据库,所有操作都必须非常安全。如果需要安全,请不要使用不受支持的版本。无论如何,您必须在某个时候升级到受支持的版本。做8.3题8.4->9.6->10比直接执行8.3->10麻烦得多。最大的变化是删除了从8.3到8.4发生的许多(危险的)隐式强制转换,但您也必须处理这些。你不应该把这么重要的任务建立在“你听说过”的基础上。无论如何,你必须自己测试它。所以你最好从一开始就用一个现代版本进行测试。对不起,我不明白你所说的“删除许多隐式类型转换”是什么意思。你是说在8.4或9.6版本中,例如:bigint,哪一个是非法的?我记错了。我所想的那些变化已经在8.3中发生了。特别是这一条:“非字符数据类型不再自动转换为文本”-许多写得不好的查询因此中断。好的,但是当我使用'a(TEXT)'函数
pg_catalog.a(TEXT)
时会发生什么?这是否意味着默认情况下从
public
catalog调用函数?调用没有任何前缀的函数时会发生什么情况?函数的搜索顺序是通过定义的。