проверять пользователя перед выполнением запросов - PullRequest
0 голосов
/ 17 мая 2018

Я хочу проверить пользователя перед выполнением некоторых запросов.Я делаю что-то вроде этого:

DO $do$
  BEGIN
  IF(current_user=$$usrA$$) THEN
    ALTER TYPE enum_to_change ADD VALUE $$myNewValue$$;
  ELSE
    SELECT $$ERROR$$; /*must crash here*/
  END IF;
END $do$;

Это не работает:

ERROR:  ALTER TYPE ... ADD cannot be executed from a function or multi-command string
CONTEXT:  SQL statement "ALTER TYPE e ADD VALUE 'myNewValue'"
PL/pgSQL function inline_code_block line 4 at SQL statement

Есть ли способ сделать это?

1 Ответ

0 голосов
/ 17 мая 2018

https://www.postgresql.org/docs/current/static/sql-altertype.html

ALTER TYPE ... ADD VALUE (форма, которая добавляет новое значение в перечисление type) не может быть выполнен внутри блока транзакции.

https://www.postgresql.org/message-id/3543.1317224437%40sss.pgh.pa.us

The comment beside the code says what it breaks:

case T_AlterEnumStmt: /* ALTER TYPE (enum) */

/*
* We disallow this in transaction blocks, because we can't cope
* with enum OID values getting into indexes and then having their
* defining pg_enum entries go away.
*/

Похоже, ты не можешь этого сделать. И это означало поведение ...

...