postgresql - 如何在 AWS Aurora RDS Postgres 中创建用户定义的函数
问题描述
(为简单起见格式化问题)
我正在使用 AWS RDS Aurora Postgres 10.7(这是我的 us-west-2 区域可用的最新版本)。我在无服务器模式下使用它,因此我在 AWS 控制台中嵌入了查询编辑器来运行我的查询。我需要编写用户定义的函数来执行某些复杂的数据库操作。我在我的本地 Postgres 实例上进行了尝试,它工作正常,但是,在 AWS 上我无法创建函数。
以下导致错误:错误:“END”处或附近的语法错误。请注意,在“return 1”之后添加分号也会导致错误。
CREATE OR REPLACE function some_function()
RETURNS integer AS
$BODY$
Begin
return 1
End
$BODY$
LANGUAGE 'plpgsql';
而下面的内容让我创建了该函数,但由于它没有主体,因此无法使用。
CREATE OR REPLACE function some_function()
RETURNS integer AS
$BODY$
Begin
End
$BODY$
LANGUAGE 'plpgsql';
My questions is: Has anyone used AWS RDS Query Editor to create user-defined functions in Aurora Postgres? Is yes, what part of syntax is wrong in the example above.
解决方案
我们遇到了同样的问题并与 AWS 取得了联系,后者确认这确实是查询编辑器工具的问题。他们没有关于何时解决问题的 ETA。
解决方案 1:使用 psql
好消息是这将适用于psql
. 这是他们回复电子邮件的一个片段:
$ psql -h database-2.cluster-xx.us-west-2.rds.amazonaws.com -d postgres -U postgres
postgres=> CREATE OR REPLACE FUNCTION trigger_set_updated_at() RETURNS TRIGGER AS $$
postgres$> BEGIN NEW.updated_at = NOW();
postgres$> RETURN NEW;END;$$
postgres-> LANGUAGE plpgsql;
CREATE FUNCTION
有关如何设置的文档:https ://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToPostgreSQLInstance.html
解决方案 2:使用数据 API
我们已经使用Data API与我们的集群进行通信,因此对我们来说最简单的解决方案实际上是使用 AWS CLI 和现有的数据库密钥。
您可以将函数定义放在一个function.sql
文件中:
CREATE OR REPLACE FUNCTION increment(i integer) RETURNS integer AS $$
BEGIN
RETURN i + 1;
END;
$$ LANGUAGE plpgsql;
然后在数据库上执行它:
cat function.sql | xargs -0 aws rds-data execute-statement \
--resource-arn arn:aws:rds:eu-west-1:xxx:cluster:cluster-name \
--secret-arn arn:aws:secretsmanager:eu-west-1:xxx:secret:secret-name-xxx \
--database "database_name" \
--sql
希望这是有用的,祝你好运!
推荐阅读
- javascript - CSS 网格系统或媒体查询
- c - scanf("%d",&variable); 在我在一些空格键后单击输入后,整个程序正常运行时,即使按下空格键也不会停止
- php - 在 Laravel 5.3 中安装 spatie/laravel-activitylog
- swift - 当我点击 UIActivityViewController 上的“保存图像”选项时,为什么我的应用程序会崩溃?
- maven - Maven 生命周期的自定义替代配置
- c - 带有 () 和 {} 的 C 预处理器宏代码
- python - 提交时views.py中的Django处理表单数据
- python-3.x - 使用排列优化蛮力
- c# - 将天/小时/分钟/秒转换为小时/分钟/秒
- ios - 如何知道您的短信过滤器扩展是否在 iOS 设置中启用?