Pio*_*sen 7 postgresql cast amazon-rds
我正在将现有应用程序迁移到 Amazon RDS PostgreSQL。该应用程序具有跨数据库支持,出于兼容性原因,它包含以下 SQL:
CREATE CAST (varchar AS numeric) WITH INOUT AS ASSIGNMENT
Run Code Online (Sandbox Code Playgroud)
在普通 PostgreSQL 上,这需要超级用户。在 Amazon RDS PostgreSQL 上这失败了
错误:必须是类型字符变化或数字类型的所有者
注意:我猜这是否是赋值或隐式转换无关紧要,但为了完整性而包含此信息。
现代 Postgres 和 Amazon RDS 中的限制相同。根据文档:
为了能够创建强制转换,您必须拥有源或目标数据类型
USAGE,并对其他类型拥有特权。要创建二进制强制转换,您必须是超级用户。(做出此限制是因为错误的二进制强制转换很容易导致服务器崩溃。)
大胆强调我的。由于所有基本类型(包括varchar和numeric)都由超级用户 postgres 所有(默认情况下),因此您需要有效地成为超级用户。如果您已经尝试过postgres,我们可以得出结论,Amazon RDS 在后台拥有另一个超级用户角色,拥有这些类型(可能还有整个核心系统)。
Amazon RDS 在线手册指出了以下内容:
创建数据库实例时,您创建的主用户系统帐户将分配给 rds_superuser 角色。rds_superuser 角色是预定义的 Amazon RDS 角色,类似于 PostgreSQL 超级用户角色(在本地实例中通常命名为 postgres),但有一些限制。
大胆强调我的。