CREATE TABLE AS
CREATE TABLE AS — создать таблицу из результатов запроса
Синтаксис
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] имя_таблицы
    [ (имя_столбца [, ...] ) ]
    [ WITH ( параметр_хранения [= значение] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]
    [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
    [ TABLESPACE табл_пространство ]
    AS запрос
    [ WITH [ NO ] DATA ]Описание
CREATE TABLE AS создаёт таблицу и наполняет её данными, полученными в результате выполнения SELECT. Столбцы этой таблицы получают имена и типы данных в соответствии со столбцами результата SELECT (хотя имена столбцов можно переопределить, добавив явно список новых имён столбцов).
CREATE TABLE AS напоминает создание представления, но на самом деле есть значительная разница: эта команда создаёт новую таблицу и выполняет запрос только раз, чтобы наполнить таблицу начальными данными. Последующие изменения в исходных таблицах запроса в новой таблице отражаться не будут. С представлением, напротив, определяющая его команда SELECT выполняется при каждой выборке из него.
Параметры
- GLOBALили- LOCAL
- Для совместимости игнорируются. Использование этих ключевых слов считается устаревшим; за подробностями обратитесь к CREATE TABLE. 
- TEMPORARYили- TEMP
- Если указано, создаваемая таблица будет временной. За подробностями обратитесь к CREATE TABLE. 
- UNLOGGED
- Если указано, создаваемая таблица будет нежурналируемой. За подробностями обратитесь к CREATE TABLE. 
- IF NOT EXISTS
- Не считать ошибкой, если отношение с таким именем уже существует. В этом случае будет выдано замечание. За подробностями обратитесь к описанию CREATE TABLE. 
- имя_таблицы
- Имя создаваемой таблицы (возможно, дополненное схемой). 
- имя_столбца
- Имя столбца в создаваемой таблице. Если имена столбцов не заданы явно, они определяются по именам столбцов результата запроса. 
- WITH (- параметр_хранения[=- значение] [, ... ] )
- Это предложение определяет дополнительные параметры хранения для новой таблицы: за подробностями обратитесь к Параметры хранения. Предложение - WITHможет также включать указание- OIDS=TRUE(или просто- OIDS), с которым строкам в новой таблице будут назначаться идентификаторы объектов (OID), либо указание- OIDS=FALSE, с которым строки не будут содержать OID. За дополнительными сведениями обратитесь к CREATE TABLE.
- WITH OIDS- WITHOUT OIDS
- Это устаревшее написание указаний - WITH (OIDS)и- WITH (OIDS=FALSE), соответственно. Если требуется определить одновременно свойство- OIDSи параметры хранения, необходимо использовать синтаксис- WITH ( ... ); см. ниже.
- ON COMMIT
- Поведением временных таблиц в конце блока транзакции позволяет управлять предложение - ON COMMIT, которое принимает три параметра:- PRESERVE ROWS
- Никакое специальное действие в конце транзакции не выполняется. Это поведение по умолчанию. 
- DELETE ROWS
- Все строки в этой временной таблице будут удаляться в конце каждого блока транзакции. По сути, при каждой фиксации транзакции будет автоматически выполняться TRUNCATE. 
- DROP
- Эта временная таблица будет удаляться в конце текущего блока транзакции. 
 
- TABLESPACE- табл_пространство
- Здесь - табл_пространство— имя табличного пространства, в котором будет создаваться новая таблица. Если оно не указано, выбирается default_tablespace или temp_tablespaces, если таблица временная.
- запрос
- Команда SELECT, TABLE или VALUES, либо команда EXECUTE, выполняющая подготовленный запрос - SELECT,- TABLEили- VALUES.
- WITH [ NO ] DATA
- Это предложение определяет, будут ли данные, выданные запросом, копироваться в новую таблицу. Если нет, то копируется только структура. По умолчанию данные копируются. 
Замечания
Функциональность этой команды подобна SELECT INTO, но предпочтительнее использовать её, во избежание путаницы с другими применениями синтаксиса SELECT INTO. Кроме того, набор возможностей CREATE TABLE AS шире, чем у SELECT INTO.
Команда CREATE TABLE AS позволяет пользователю явно определить, добавлять ли OID в таблицу. Если присутствие OID не определено явно, оно определяется конфигурационной переменной default_with_oids.
Примеры
Создание таблицы 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, с применением подготовленного оператора. Новая таблица будет содержать OID и прекратит существование при фиксации транзакции: 
PREPARE recentfilms(date) AS
  SELECT * FROM films WHERE date_prod > $1;
CREATE TEMP TABLE films_recent WITH (OIDS) ON COMMIT DROP AS
  EXECUTE recentfilms('2002-01-01');Совместимость
CREATE TABLE AS соответствует стандарту SQL. Нестандартные расширения перечислены ниже: 
- Стандарт требует заключать предложение подзапроса в скобки, но в Postgres Pro эти скобки необязательны. 
- Стандарт требует наличия указания - WITH [ NO ] DATA, в Postgres Pro оно необязательно.
- Postgres Pro работает с временными таблицами не так, как описано в стандарте; за подробностями обратитесь к CREATE TABLE. 
- Предложение - WITHявляется расширением Postgres Pro; в стандарте ни параметры хранения, ни OID не оговариваются.
- Концепция табличных пространств в Postgres Pro отсутствует в стандарте. Как следствие, предложение - TABLESPACEявляется расширением.