CREATE TABLE AS
Эта страница переведена при помощи нейросети GigaChat.
CREATE TABLE AS
- создание новой таблицы из результатов запроса.
Синтаксис
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name
[ (column_name [, ...] ) ]
[ USING method ]
[ WITH ( storage_parameter [= value] [, ... ] ) | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace_name ]
AS query
[ WITH [ NO ] DATA ]
Описание
CREATE TABLE AS
создает новую таблицу и заполняет ее данными, полученными в результате выполнения команды SELECT
. Столбцы новой таблицы получают имена и типы данных, соответствующие выходным столбцам запроса SELECT
(однако имена столбцов можно переопределить, явно указав их список).
Команда CREATE TABLE AS
отчасти похожа на создание представления, но на самом деле работает иначе: она создает настоящую таблицу и выполняет запрос только один раз для первоначального наполнения этой таблицы. Новая таблица не отслеживает изменения в исходных таблицах запроса. В отличие от этого, представление пересчитывает свой определяющий запрос SELECT
каждый раз при обращении.
Для использования CREATE TABLE AS
требуется привилегия CREATE
в схеме, где будет создана таблица.
Параметры
GLOBAL
илиLOCAL
- Игнорируются ради совместимости. Использование этих ключевых слов устарело. Смотрите CREATE TABLE для подробностей.
TEMPORARY
илиTEMP
- Создает таблицу как временную. Обратитесь к разделу CREATE TABLE для получения подробной информации.
UNLOGGED
- Создает таблицу как незарегистрированную. Обратитесь к CREATE TABLE для получения подробной информации.
IF NOT EXISTS
- Подавляет ошибку, если указанное таблица с тем же именем уже существует, вместо этого выводится уведомление и оставляет таблицу без изменений.
table_name
- Имя существующей таблицы, при необходимости дополненное схемой, которая должна быть создана.
column_name
- Имя столбца в новой таблице. Если имена столбцов не указаны, они берутся из имен выходных столбцов запроса.
USING method
- Указывает метод доступа к таблице для хранения данных. Метод должен быть типа
TABLE
. Смотрите главу «Определение интерфейса метода доступа к таблицам» для получения дополнительной информации Если не указан, используется метод по умолчанию. Смотрите default_table_access_method для получения дополнительной информации. ПараметрUSING
является опциональным.
WITH (storage_parameter [= value] [, ... ])
- Указывает дополнительные параметры хранения для таблицы. Смотрите описание параметров хранения в документации CREATE TABLE. Для обратной совместимости возможно указание
OIDS=FALSE
, чтобы строки не содержали OID (идентификаторы объектов);OIDS=TRUE
больше не поддерживается.
WITHOUT OIDS
- Игнорируется - устаревший синтаксис, равнозначный
OIDS=FALSE
. Создание таблиц с OID больше не поддерживается.
ON COMMIT
- Определяет поведение временных таблиц в конце блока транзакции. Возможны три варианта:
PRESERVE ROWS
— данные сохраняются (поведение по умолчанию).DELETE ROWS
— данные автоматически удаляются в конце каждой транзакции (аналогTRUNCATE
).DROP
— временная таблица удаляется в конце текущей транзакции.
TABLESPACE tablespace_name
- Задает имя табличного пространства, в котором будет создана таблица. Если не указано, используется default_tablespace или temp_tablespaces для временных таблиц.
query
- Указывает запрос вида SELECT, TABLE, VALUES или EXECUTE, возвращающий данные, которыми будет заполнена таблица.
WITH [ NO ] DATA
- Определяет, нужно ли копировать данные, полученные запросом, в новую таблицу. Если указано
NO DATA
, копируется только структура таблицы. По умолчанию данные копируются.
Примечания
Эта команда функционально похожа на SELECT INTO, но предпочтительнее, так как ее синтаксис менее неоднозначен. Кроме того, CREATE TABLE AS
поддерживает больше возможностей, чем SELECT INTO
.
Примеры
Создание новой таблицы films_recent
, состоящую только из последних записей из таблицы films
:
CREATE TABLE films_recent AS
SELECT * FROM films WHERE date_prod >= '2002-01-01';
Полное копирование таблицы (также можно использовать короткую форму команды TABLE
):
CREATE TABLE films2 AS
TABLE films;
Создание новой временной таблицы films_recent
, состоящей только из последних записей из таблицы films
, с применением подготовленного оператора. Новая таблица прекратит существование при фиксации транзакции:
PREPARE recentfilms(date) AS
SELECT * FROM films WHERE date_prod > $1;
CREATE TEMP TABLE films_recent ON COMMIT DROP AS
EXECUTE recentfilms('2002-01-01');
Совместимость
CREATE TABLE AS
соответствует стандарту SQL. Ниже приведены расширения PostgreSQL:
- В стандарте подзапрос должен быть заключен в скобки — в PostgreSQL это необязательно.
- В стандарте требуется обязательное указание
WITH [ NO ] DATA
— в PostgreSQL это опционально. - PostgreSQL использует другой механизм временных таблиц по сравнению со стандартом — смотрите CREATE TABLE.
- Выражение
WITH
и параметры хранения — расширения PostgreSQL. - Табличные пространства (
TABLESPACE
) — также расширение PostgreSQL.
Смотрите также
CREATE MATERIALIZED VIEW, CREATE TABLE, EXECUTE, SELECT, SELECT INTO, VALUES