我在 AWS SCT 工具的帮助下将 Oracle db 迁移到了 Aurora postgreSQL。所有包和触发器在 PostgreSQL 中都被转换为函数。我的问题是所有名称都用$
(美元)符号转换。
例如,Oracle 中的一个包和相关的存储过程pk_audit.sp_get_audit
转换为pk_audit$sp_get_audit
带有 $ 符号的 postgreSQL。但是,在中间件数据库对象名称是pk_audit.sp_get_audit
. 为了尽量减少中间件的工作量,我需要将所有函数pk_audit$sp_get_audit
从pk_audit.sp_get_audit
.
我已经用 $ 符号转换了 1500 多个函数。需要一个脚本来更改所有用户定义的函数名称。我创建了一个脚本来构建更改脚本。
`select a.alter_statement|| replace(a.rename_statement,'$','.')
From
(
SELECT format('ALTER %s %I.%I(%s)'
, 'FUNCTION'
,CONCAT('"',n.nspname,'"')
, p.proname
, pg_catalog.pg_get_function_identity_arguments(p.oid)
) AS alter_statement,
format('RENAME %s %I.%I(%s);'
, 'TO'
, CONCAT('"',n.nspname,'"')
, p.proname
, pg_catalog.pg_get_function_identity_arguments(p.oid)
) AS rename_statement
FROM pg_catalog.pg_proc p
JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
and n.nspname = 'my_schema' ORDER BY 1
) a;`
但结果是抛出错误。请帮忙谢谢