Postgresql: тип данных для итерации в операторе выбора

Я пытаюсь создать итеративную переменную для использования в операторе выбора. Если я жестко закодирую переменную, мой блок кода будет работать нормально:

DO
$$
DECLARE
  num integer;
BEGIN
  num := (select count(*) from event where event_status in ('pending', 'failed'));
  raise notice 'count here: %', num;
END;
$$

Однако, если я пытаюсь создать переменную с именем statuses из итерируемого объекта, я получаю сообщение об ошибке «синтаксическая ошибка в массиве или рядом с ним»:

DO
$$
DECLARE
  statueses array := ('pending', 'failed');
  num integer;
BEGIN
  num := (select count(*) from event where event_status in statuses);
  raise notice 'count here: %', num;
END;
$$

Я использую неправильный тип данных? Как заставить это работать? Обратите внимание, я использую PostgreSQL.

См. ienablemuch.com/2010/07/postgresqls-findinset.html, чтобы узнать, как создать PG эквивалент функции MySQL FIND_IN_SET(), а затем использовать строку statuses := 'pending,failed';, разделенную запятыми.

Barmar 28.08.2018 22:20

Можно попробовать statuses text[] := '{"pending","failed"}'. Хотя не уверен в синтаксисе.

Hitobat 28.08.2018 22:31

@Hitobat получает сообщение об ошибке: syntax error at or near "statuses"

Johnny Metz 28.08.2018 23:12
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
29
0

Другие вопросы по теме