Подтвердить что ты не робот

Как я могу выполнить код pl/pgsql без создания функции?

С SQL Server я могу выполнить код ad hoc T-SQL с полной процедурной логикой через SQL Server Management Studio или любой другой клиент. Я начал работать с PostgreSQL и столкнулся с некоторой разницей в том, что PGSQL требует, чтобы какая-либо логика была встроена в функцию.

Есть ли способ выполнить код PL/PGSQL без создания функции?

4b9b3361

Ответ 1

Postgres 9

DO $$ 
-- declare
BEGIN
  /* pl/pgsql here */
END $$;

Ответ 2

Нет, еще нет. Версия 9.0 (все еще альфа) будет иметь эту опцию (do), вам придется подождать, пока она не будет выпущена.

Ответ 3

Я изо всех сил пытался заставить это работать, потому что он довольно строг в добавлении полуколонок в нужные места. Но как только вы привыкнете к этому, он работает хорошо. Помимо невозможности возвращать записи, конечно, вы можете создавать уведомления и исключения и выполнять другие обходные пути, например, используя временные таблицы, как указано в комментарии @ErwinBrandstetter в комментарии выше.

например:.

DO 
$$
BEGIN
  IF EXISTS(SELECT 'any rows?' 
              FROM {your_table} 
              WHERE {your_column} = 'blah')
  THEN
      RAISE NOTICE 'record exists';
  ELSE
      RAISE EXCEPTION 'record does not exist';
  END IF;

  DROP TABLE IF EXISTS foo;

  CREATE TEMP TABLE foo AS
  SELECT 'bar'::character varying(5) as baz;
END 
$$;

SELECT * FROM foo;