CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE nome_da_tabela [ (nome_da_coluna [, ...] ) ] [ WITH ( parâmetro_de_armazenamento [= valor] [, ... ] ) | WITH OIDS | WITHOUT OIDS ] [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ] [ TABLESPACE espaço_de_tabelas ] AS comando
O comando CREATE TABLE AS cria uma tabela e a preenche com dados computados pelo comando SELECT. As colunas da tabela possuem os nomes e tipos de dado associados às colunas de saída do comando SELECT (mas é possível mudar os nomes das colunas fornecendo uma lista explícita contendo os novos nomes das colunas). [1]
O comando CREATE TABLE AS possui alguma semelhança com o comando de criação de uma visão, mas na realidade é bastante diferente: este comando cria a nova tabela e executa a consulta apenas uma vez para preencher inicialmente a nova tabela. A nova tabela não acompanha as mudanças posteriores ocorridas nas tabelas de origem do comando. Diferentemente, a visão executa novamente o comando SELECT que a define sempre que é consultada.
Ignorado por compatibilidade. Para obter detalhes deve ser consultado o comando CREATE TABLE.
Se for especificado a tabela será criada como sendo uma tabela temporária. Para obter detalhes deve ser consultado o comando CREATE TABLE.
O nome (opcionalmente qualificado pelo esquema) da tabela a ser criada.
O nome da coluna na nova tabela. Se os nomes das colunas não forem fornecidos, estes serão obtidos a partir dos nomes das colunas de saída do comando. Se a tabela for criada a partir de um comando EXECUTE, não poderá ser especificada a lista contendo os nomes das colunas.
Esta cláusula especifica os parâmetros de armazenamento opcionais para a nova tabela. Para obter mais informações deve ser consultado Parâmetros de Armazenamento. A cláusula WITH também pode incluir OIDS=TRUE (ou apenas OIDS) para especificar que as linhas da nova tabela devem possuir OIDs (identificadores de objeto) atribuídas as mesmas, ou OIDS=FALSE para especificar que as linhas não devem possuir OIDs. Para obter detalhes deve ser consultado o comando CREATE TABLE.
Estas são sintaxes em obsolescência equivalentes a WITH (OIDS) e WITH (OIDS=FALSE), respectivamente. Se for desejado fornecer tanto a definição de OIDS quanto os parâmetros de armazenamento, será necessário utilizar a sintaxe WITH ( ... ); veja acima.
O comportamento das tabelas temporárias ao término do bloco de transação pode ser controlado utilizando ON COMMIT. As três opções são:
Não é realizada nenhuma ação especial ao término da transação. Este é o comportamento padrão.
Todas as linhas da tabela temporária são excluídas ao término de cada bloco de transação. Essencialmente, é feito um TRUNCATE automático após cada efetivação.
A tabela temporária é removida ao término do bloco de transação corrente.
O espaço_de_tabelas é o nome do espaço de tabelas onde a nova tabela será criada. Se não for especificado será utilizado o default_tablespace, ou o espaço de tabelas padrão do banco de dados se default_tablespace for uma cadeia de caracteres vazia.
Um comando SELECT ou VALUES, ou um comando EXECUTE que executa um comando SELECT ou VALUES preparado.
Este comando é funcionalmente equivalente ao comando SELECT INTO, mas é preferido por ser menos propenso a ser confundido com outros usos da sintaxe do SELECT INTO. Além disso, o comando CREATE TABLE AS oferece um superconjunto das funcionalidades oferecidas pelo comando SELECT INTO.
Antes do PostgreSQL 8.0, o comando CREATE TABLE AS sempre incluía os OIDs nas tabelas criadas. A partir do PostgresSQL 8.0, o comando CREATE TABLE AS passou a permitir ao usuário especificar explicitamente se os OIDs devem ser incluídos. Se a presença dos OIDs não for especificada explicitamente, será utilizada a variável de configuração default_with_oids. A partir do PostgreSQL 8.1, o valor padrão desta variável passou a ser falso e, portanto, o comportamento padrão não é mais idêntico aos das versões pré-8.0. Os aplicativos que requerem a presença de OIDs nas tabelas criadas pelo comando CREATE TABLE AS devem especificar explicitamente WITH (OIDS) para garantir o comportamento apropriado.
Criar a tabela filmes_recentes consistindo apenas das entradas recentes da tabela filmes:
CREATE TABLE filmes_recentes AS SELECT * FROM filmes WHERE data_prod >= '2002-01-01';
Criar a tabela temporária filmes_recentes consistindo apenas das entradas recentes da tabela filmes, utilizando um comando preparado. A nova tabela possui OIDs e será removida na efetivação:
PREPARE filmes_recentes(date) AS SELECT * FROM filmes WHERE data_prod > $1; CREATE TEMP TABLE filmes_recentes WITH (OIDS) ON COMMIT DROP AS EXECUTE filmes_recentes('2002-01-01');
O comando CREATE TABLE AS está em conformidade com o padrão SQL, com as seguintes exceções:
O padrão requer parênteses em torno da cláusula de subconsulta; no PostgreSQL estes parênteses são opcionais.
O padrão define a cláusula WITH [ NO ] DATA, que não está implementada no momento pelo PostgreSQL. O comportamento fornecido pelo PostgreSQL é equivalente ao caso WITH DATA do padrão. Pode ser simulado WITH NO DATA incluindo LIMIT 0 no comando.
O PostgreSQL trata as tabelas temporárias de uma forma bem diferente do padrão; Para obter detalhes deve ser consultado o comando CREATE TABLE.
A cláusula WITH é uma extensão do PostgreSQL; o padrão não trata nem de parâmetros de armazenamento nem de OIDs.
O conceito de espaço de tabelas do PostgreSQL não faz parte do padrão. Portanto, a cláusula TABLESPACE é uma extensão.
[1] |
DB2 — No comando CREATE TABLE, a cláusula LIKE nome da tabela, nome da visão ou apelido especifica que as colunas da tabela possuem exatamente o mesmo nome e descrição das colunas da tabela, visão ou apelido identificado. O nome especificado após o LIKE deve identificar uma tabela, visão ou apelido existente no catálogo, ou uma tabela temporária declarada. DB2 Version 9 for Linux, UNIX, and Windows (N. do T.) |