(为简单起见,格式化问题)
我正在使用AWS RDS Aurora Postgres 10.7(这是我的us-west-2区域可用的最新版本)。我在无服务器模式下使用它,因此我将查询编辑器嵌入AWS控制台中以运行查询。 我需要编写用户定义的函数来执行某些复杂的数据库操作。我在我的Postgres本地实例上尝试了它,但是效果很好,但是在AWS上,我无法创建函数。
以下结果将导致错误:错误:“ END”或附近的语法错误。请注意,在“返回1”之后添加分号也会导致错误。
foreach (var name in doc.Descendants("Name").ToList())
{
var attr = new XElement("Attribute",
new XAttribute("name", "Name"), name.Value);
name.ReplaceWith(attr);
}
以下内容使我可以创建该函数,但由于它没有主体,因此无法使用。
CREATE OR REPLACE function some_function()
RETURNS integer AS
$BODY$
Begin
return 1
End
$BODY$
LANGUAGE 'plpgsql';
答案 0 :(得分:1)
我们遇到了同样的问题,并与AWS联系,后者确认Query Editor工具确实存在问题。他们没有何时解决问题的预计到达时间。
好消息是,它将与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
我们已经使用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
希望这是有用的,祝您好运!