Невозможно создать триггер Postgres для базы данных AWS без сервера - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь создать триггер в безсерверной базе данных Postgres AWS. У меня проблема в том, что AWS Query Editor разбивает оператор триггера создания на 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 для запуска содержимого окна редактора в виде одного оператора.

Подобные проблемына другой платформе были отмечены здесь . Я попробовал некоторые решения там безрезультатно.

1 Ответ

0 голосов
/ 19 октября 2019

Я не нашел способа сделать это из интерфейса редактора запросов AWS, но я придумал эту работу. Обратите внимание, что базы данных AWS без сервера не поддерживают публичный доступ, поэтому вы должны обращаться к базе данных из экземпляра EC2 на том же VPC.

  1. Установить экземпляр EC2 на том же VPC.
  2. Установите докер на свой экземпляр EC2. Инструкции здесь .
  3. Запустите контейнер докера с клиентом psql. Контейнер здесь . Этот контейнер работает с psql 10.3, который, кажется, прекрасно работает с базой данных 10.7.

синтаксис:

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

Скорее всего, ваши {username} и {database} будут 'postgres',{Aws-endpoint} - это имя конечной точки, назначенное вашему кластеру RDS AWS. Порт по умолчанию - 5432.

Если подключение хорошее, у вас сразу же будет запрошен пароль. Оттуда вы можете запускать традиционные команды psql.

Если подключение плохое, командная строка будет зависать с мигающим курсором. Наиболее вероятные проблемы с подключением:

  1. EC2 и RDS не находятся на одном и том же VPC.
  2. Входящий трафик RDS не включен для порта 5432 Postgres от EC2.
  3. База данных приостановлена ​​из-за неактивности (эта будет самокорректироваться).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...