Exemplos de CTAS
O exemplo a seguir cria uma tabela denominada EVENT_BACKUP para a tabela EVENT:
create table event_backup as select * from event;
A tabela resultante herda as chaves de distribuição e de classificação da tabela EVENT.
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'event_backup';
column | type | encoding | distkey | sortkey
----------+-----------------------------+----------+---------+--------
catid | smallint | none | false | 0
dateid | smallint | none | false | 1
eventid | integer | none | true | 0
eventname | character varying(200) | none | false | 0
starttime | timestamp without time zone | none | false | 0
venueid | smallint | none | false | 0
O comando a seguir cria uma nova tabela denominada EVENTDISTSORT selecionando quatro colunas da tabela EVENT. A nova tabela é distribuída por EVENTID e classificada por EVENTID e DATEID:
create table eventdistsort
distkey (1)
sortkey (1,3)
as
select eventid, venueid, dateid, eventname
from event;
O resultado é o seguinte:
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'eventdistsort';
column | type | encoding | distkey | sortkey
---------+------------------------+----------+---------+-------
eventid | integer | none | t | 1
venueid | smallint | none | f | 0
dateid | smallint | none | f | 2
eventname | character varying(200)| none | f | 0
Você pode criar exatamente a mesma tabela usando nomes de coluna para as chaves de distribuição e de classificação. Por exemplo:
create table eventdistsort1
distkey (eventid)
sortkey (eventid, dateid)
as
select eventid, venueid, dateid, eventname
from event;
A instrução a seguir aplica distribuição uniforme à tabela, mas não define uma chave de classificação explícita.
create table eventdisteven
diststyle even
as
select eventid, venueid, dateid, eventname
from event;
A tabela não herda a chave de classificação da tabela EVENT (EVENTID), pois a distribuição EVEN é especificada para a nova tabela. A nova tabela não tem chave de classificação e de distribuição.
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'eventdisteven';
column | type | encoding | distkey | sortkey
----------+------------------------+----------+---------+---------
eventid | integer | none | f | 0
venueid | smallint | none | f | 0
dateid | smallint | none | f | 0
eventname | character varying(200) | none | f | 0
A instrução a seguir aplica a distribuição uniforme e define uma chave de classificação:
create table eventdistevensort diststyle even sortkey (venueid)
as select eventid, venueid, dateid, eventname from event;
A tabela resultante tem uma chave de classificação, mas não uma de distribuição.
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'eventdistevensort';
column | type | encoding | distkey | sortkey
----------+------------------------+----------+---------+-------
eventid | integer | none | f | 0
venueid | smallint | none | f | 1
dateid | smallint | none | f | 0
eventname | character varying(200) | none | f | 0
A instrução a seguir redistribui a tabela EVENT em uma coluna chave diferente dos dados de entrada, que são classificados na coluna EVENTID, e não define nenhuma coluna SORTKEY. Portanto, a tabela não é classificada.
create table venuedistevent distkey(venueid)
as select * from event;
O resultado é o seguinte:
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'venuedistevent';
column | type | encoding | distkey | sortkey
----------+-----------------------------+----------+---------+-------
eventid | integer | none | f | 0
venueid | smallint | none | t | 0
catid | smallint | none | f | 0
dateid | smallint | none | f | 0
eventname | character varying(200) | none | f | 0
starttime | timestamp without time zone | none | f | 0