ВЫБИРАТЬ. INTO для создания таблицы в PL/pgSQL


Я хочу использовать SELECT INTO для создания временной таблицы в одной из моих функций. SELECT INTO работает в SQL, но не PL/pgSQL.

Это утверждение создает таблицу, называемую mytable (если orig_table существует как отношение):

SELECT *
INTO TEMP TABLE mytable
FROM orig_table;

Но поместите эту функцию в PostgreSQL, и вы получите ошибку: ERROR: "temp" is not a known variable

CREATE OR REPLACE FUNCTION whatever()
RETURNS void AS $$
BEGIN
    SELECT *
    INTO TEMP TABLE mytable
    FROM orig_table;
END; $$ LANGUAGE plpgsql;

Я могу SELECT INTO переменную типа record в PL/pgSQL, но тогда я должен определить структуру при получении данных из этой записи. SELECT INTO очень просто-автоматическое создание таблица той же структуры запроса SELECT. Есть ли у кого-нибудь объяснение, почему это не работает внутри функции?

Похоже, что SELECT INTO работает по-другому в PL/pgSQL, потому что вы можете выбрать переменные, которые вы объявили. Однако я не хочу объявлять свою временную структуру таблицы. Я бы хотел, чтобы он просто создавал структуру автоматически, как это делается в SQL.

1 23

1 ответ:

Попробуйте

CREATE TEMP TABLE mytable AS
SELECT *
FROM orig_table;

За http://www.postgresql.org/docs/current/static/sql-selectinto.html

Создайте таблицу, функционально аналогичную SELECT INTO. Создать таблицу как рекомендуемый синтаксис, так как эта форма SELECT INTO недоступна в ECPG или PL/pgSQL, поскольку они интерпретируют предложение INTO по-разному. Кроме того, CREATE TABLE AS предлагает надмножество функций, предоставляемых SELECT INTO.