CREATE TABLE AS — создание новой таблицы на основе результатов запроса
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name
[ (column_name [, ...] ) ]
[ USING метод ]
[ WITH ( storage_parameter [= значение] [, ... ] ) | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace_name ]
AS запрос
[ 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 метод
Данное необязательное предложение определяет метод доступа к таблице, применяемый для хранения содержимого новой таблицы; выбранный метод должен относиться к типу TABLE. См. Глава 7.11 для получения
дополнительной информации. Если данный параметр не указан, для новой таблицы выбирается метод доступа к таблице по умолчанию. См. default_table_access_method для получения дополнительной информации.
WITH ( storage_parameter [= значение] [, ... ] )
Это предложение задает необязательные параметры хранения для новой таблицы;
см. Storage Parameters в
CREATE TABLE документации для получения
дополнительной информации. Для обеспечения обратной совместимости WITH
предложение для таблицы может также включать OIDS=FALSE для указания того, что строки новой таблицы не должны содержать OID (объектных идентификаторов), OIDS=TRUE более не поддерживается.
WITHOUT OIDS
Данный синтаксис используется для обеспечения обратной совместимости при объявлении таблицы
WITHOUT OIDS, создание таблицы WITH
OIDS более не поддерживается.
ON COMMIT
Поведением временных таблиц по завершении блока транзакции можно управлять, используя ON COMMIT.
Доступны три варианта:
PRESERVE ROWSНикаких специальных действий при завершении транзакций не выполняется. Данное поведение используется по умолчанию.
DELETE ROWS
Все строки во временной таблице будут удалены по завершении
каждого блока транзакции. По сути, автоматическая команда TRUNCATE выполняется
при каждом COMMIT.
DROPВременная таблица будет удалена по завершении текущего блока транзакции.
TABLESPACE tablespace_name
Это tablespace_name — имя
табличного пространства, в котором должна быть создана новая таблица.
Если оно не указано,
default_tablespace используется значение параметра, либо
temp_tablespaces если таблица является временной.
запрос
Команда SELECT, TABLE, или VALUES
команда, либо EXECUTE команда, выполняющая
подготовленный SELECT, TABLE, или
VALUES запрос.
WITH [ NO ] DATAДанное предложение определяет, должны ли данные, возвращаемые запросом, копироваться в новую таблицу. В противном случае копируется только структура таблицы. По умолчанию данные копируются.
Данная команда функционально аналогична SELECT INTO, однако она является
предпочтительной, поскольку менее вероятно ее смешивание с другими вариантами использования
синтаксиса 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 command can also be used:
CREATE TABLE films2 AS TABLE films;
Создание новой временной таблицы films_recent, состоящей только из последних записей таблицы films, с использованием подготовленного оператора. Новая таблица будет удалена при фиксации транзакции (commit):
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
standard. Следующие возможности являются нестандартными расширениями:
Стандарт требует заключения подзапроса в скобки; в Digital Q.DataBase, данные скобки являются необязательными.
В стандарте WITH [ NO ] DATA предложение
является обязательным; в Digital Q.DataBase оно является необязательным.
Digital Q.DataBase обрабатывает временные таблицы способом, существенно отличающимся от стандарта; см. CREATE TABLE для получения подробных сведений.
Это WITH предложение является Digital Q.DataBase
расширением; параметры хранения не входят в стандарт.
Это Digital Q.DataBase концепция табличных пространств не является частью стандарта. Таким образом, предложение TABLESPACE
является расширением.