【问题标题】:Unable to create Postgres trigger on AWS serverless database无法在 AWS 无服务器数据库上创建 Postgres 触发器
【发布时间】:2019-10-16 16:11:13
【问题描述】:

我正在尝试在 AWS 无服务器 Postgres 数据库上创建触发器。我遇到的问题是 AWS 查询编辑器将创建触发器语句分解为 3 个部分语句。

当我提交这个创建函数语句时:

create or replace function init_vstamp()
returns trigger as $body$
  begin
    new.vstamp := 1;
  end;
$body$ language plpgsql;

查询编辑器将其分解为这三个部分语句:

create or replace function init_vstamp()
returns trigger as $body$
  begin
    new.vstamp := 1;
  end;
$body$ language plpgsql;

查询编辑器强制每条语句以分号结束,分号是 Postgres 语法所必需的。

第一条语句的错误是:

Unterminated dollar quote started at position 60 in SQL create or replace function init_vstamp() returns trigger as $body$ begin new.vstamp := 1;DISCARD ALL. Expected terminating $$

我一直找不到任何 AWS 查询编辑器选项来将编辑器窗口的内容作为单个语句运行。

here 注意到不同平台上的类似问题。我尝试了那里的一些解决方案,但无济于事。

【问题讨论】:

    标签: postgresql amazon-web-services database-trigger serverless


    【解决方案1】:

    我没有找到从 AWS 查询编辑器 UI 执行此操作的方法,但我想出了这个解决方法。请注意,AWS Serverless 数据库不支持公共访问,因此您必须从同一 VPC 上的 EC2 实例访问数据库。

    1. 在同一 VPC 上建立 EC2 实例。
    2. 在您的 EC2 实例上安装 docker。说明here
    3. 使用 psql 客户端运行 docker 容器。容器here。这个容器运行 psql 10.3,它似乎可以在 10.7 数据库中正常工作。

    语法:

    docker run -it --rm jbergknoff/postgresql-client postgresql://{username}@{aws-endpoint}/{database}
    

    您的 {username} 和 {database} 很可能是“postgres”。 {aws-endpoint} 是 AWS 分配给您的 RDS 集群的终端节点名称。默认端口为 5432。

    如果连接良好,系统会立即提示您输入密码。从那里你可以运行传统的 psql 命令。

    如果连接不良,命令行将显示为挂起并带有闪烁的光标。最可能的连接问题是:

    1. EC2 和 RDS 不在同一个 VPC 上。
    2. 没有为来自 EC2 的 Postgres 端口 5432 启用 RDS 入站流量。
    3. 数据库因不活动而暂停(此数据库会自行更正)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 2022-08-08
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多