SELECT INTO
Создание новой таблицы по результатам команды SELECT.
Синтаксис:
SELECT [ ALL | DISTINCT [ ON (уникальное_выражение [….]) ] ] цель [ AS выходное имя ] [,…] [ INTO [ TEMPORARY | TEMP ] [ TABLE ] новая_таблица ] [ FROM источник [ {. | CROSS JOIN }…] ] [ WHERE условие_фильтрации ] [ GROUP BY условие_группировки [,…] ] [ HAVING агрегатное_условие [,…] ] [ { UNION | INTERSECT | EXCEPT } [ ALL ] подзапрос ] [ ORDER BY выражение [ ASC | DESC | USING оператор ] [….] ] [ FOR UPDATE [ OF таблица [,…]]] [ LIMIT { число | ALL } [ { OFFSET |, } начало ] ] источник:: = { [ ONLY ] таблица [ * ] [ [ AS ] псевдоним_источника [ (список_псевдонимов) ] ] | (подзапрос) [ [ AS ] псевдоним [ (список_псевдонимов) ] ] | источник [ NATURAL ] тип_объединения источник [ ON (условие_объединения) USING (список_полей_объединения) ] тип_объединения:: = [ INNER | LEFT [ OUTER ] RIGHT [ OUTER ] | FULL [ OUTER ] ] JOIN
Параметры:
Большая часть параметров команды SELECT INTO совпадает с параметрами команды SELECT. В команде SELECT INTO поддерживаются всего два новых параметра.
- TEMPORARY, TEMP. Ключевое слово TEMPORARY (или TEMP) означает, что таблица предназначена для временного использования; после завершения сеанса она автоматически уничтожается.
- новая_таблица. Имя таблицы, создаваемой для хранения записей итогового набора запроса. Таблица создается автоматически и не должна существовать до момента выполнения команды.
Результаты:
Возможные результаты перечислены в описаниях команд CREATE TABLE и SELECT.
Описание
Команда SELECT INTO выполняет запрос и использует полученные записи для заполнения новой (автоматически созданной) таблицы. Имена полей и типы данных новой таблицы определяются структурой записей, полученных в результате запроса. С функциональной точки зрения команда SELECT INTO эквивалентна команде CREATE TABLE AS. На практике рекомендуется использовать команду CREATE TABLE AS, поскольку команда SELECT INTO не является стандартной и неправильно интерпретируется PL/pgSQL.
Пример
Следующая команда создает временную таблицу для хранения записей о работниках, коды которых меньше 105:
booktown=# SELECT * INTO TEMP TABLE old_emp booktown-# FROM employees booktown-# WHERE id < 105; SELECT