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
