SnowConvert AI - PostgreSQL - CREATE TABLE

Tradução de PostgreSql para Snowflake

Aplica-se a

  • PostgreSQL

  • Greenplum

  • Netezza

Descrição

Cria uma nova tabela no PostgreSQL. Você define uma lista de colunas, cada uma das quais contém dados de um tipo distinto. O proprietário da tabela é o emissor do comando CREATE TABLE.

Para obter mais informações, consulte a documentação de CREATE TABLE.

Sintaxe da gramática

CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name ( [
  { column_name data_type [ STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ] [ COMPRESSION compression_method ] [ COLLATE collation ] [ column_constraint [ ... ] ]
    | table_constraint
    | LIKE source_table [ like_option ... ] }
    [, ... ]
] )
[ INHERITS ( parent_table [, ... ] ) ]
[ PARTITION BY { RANGE | LIST | HASH } ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [, ... ] ) ]
[ USING method ]
[ WITH ( storage_parameter [= value] [, ... ] ) | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace_name ]

CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name
    OF type_name [ (
  { column_name [ WITH OPTIONS ] [ column_constraint [ ... ] ]
    | table_constraint }
    [, ... ]
) ]
[ PARTITION BY { RANGE | LIST | HASH } ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [, ... ] ) ]
[ USING method ]
[ WITH ( storage_parameter [= value] [, ... ] ) | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace_name ]

CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name
    PARTITION OF parent_table [ (
  { column_name [ WITH OPTIONS ] [ column_constraint [ ... ] ]
    | table_constraint }
    [, ... ]
) ] { FOR VALUES partition_bound_spec | DEFAULT }
[ PARTITION BY { RANGE | LIST | HASH } ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [, ... ] ) ]
[ USING method ]
[ WITH ( storage_parameter [= value] [, ... ] ) | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace_name ]

where column_constraint is:

[ CONSTRAINT constraint_name ]
{ NOT NULL |
  NULL |
  CHECK ( expression ) [ NO INHERIT ] |
  DEFAULT default_expr |
  GENERATED ALWAYS AS ( generation_expr ) STORED |
  GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( sequence_options ) ] |
  UNIQUE [ NULLS [ NOT ] DISTINCT ] index_parameters |
  PRIMARY KEY index_parameters |
  REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
    [ ON DELETE referential_action ] [ ON UPDATE referential_action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

and table_constraint is:

[ CONSTRAINT constraint_name ]
{ CHECK ( expression ) [ NO INHERIT ] |
  UNIQUE [ NULLS [ NOT ] DISTINCT ] ( column_name [, ... ] ) index_parameters |
  PRIMARY KEY ( column_name [, ... ] ) index_parameters |
  EXCLUDE [ USING index_method ] ( exclude_element WITH operator [, ... ] ) index_parameters [ WHERE ( predicate ) ] |
  FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ]
    [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE referential_action ] [ ON UPDATE referential_action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

and like_option is:

{ INCLUDING | EXCLUDING } { COMMENTS | COMPRESSION | CONSTRAINTS | DEFAULTS | GENERATED | IDENTITY | INDEXES | STATISTICS | STORAGE | ALL }

and partition_bound_spec is:

IN ( partition_bound_expr [, ...] ) |
FROM ( { partition_bound_expr | MINVALUE | MAXVALUE } [, ...] )
  TO ( { partition_bound_expr | MINVALUE | MAXVALUE } [, ...] ) |
WITH ( MODULUS numeric_literal, REMAINDER numeric_literal )

index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:

[ INCLUDE ( column_name [, ... ] ) ]
[ WITH ( storage_parameter [= value] [, ... ] ) ]
[ USING INDEX TABLESPACE tablespace_name ]

exclude_element in an EXCLUDE constraint is:

{ column_name | ( expression ) } [ COLLATE collation ] [ opclass [ ( opclass_parameter = value [, ... ] ) ] ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ]

referential_action in a FOREIGN KEY/REFERENCES constraint is:

{ NO ACTION | RESTRICT | CASCADE | SET NULL [ ( column_name [, ... ] ) ] | SET DEFAULT [ ( column_name [, ... ] ) ] }
Copy

Opções de tabela

TEMPORARY | TEMP ou IF NOT EXISTS

Dica

Essa sintaxe é totalmente compatível com o Snowflake.

GLOBAL | LOCAL

Nota

Essa sintaxe não é necessária no Snowflake.

De acordo com a documentação PostgreSQL, GLOBAL | LOCAL estão presentes para compatibilidade com padrão SQL, mas não têm efeito no PostgreSQL e estão obsoletos. Por esse motivo, o SnowConvert AI removerá essas palavras-chave durante o processo de migração.

Fonte da amostra

Código de entrada:

PostgreSQL
CREATE GLOBAL TEMP TABLE TABLE1 (
   COL1 integer
);
Copy

Código de saída:

Snowflake
CREATE TEMPORARY TABLE TABLE1 (
   COL1 integer
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "05/09/2025",  "domain": "no-domain-provided" }}';
Copy

UNLOGGED TABLE

Nota

Essa sintaxe não é necessária no Snowflake.

As tabelas UNLOGGED oferecem uma vantagem significativa de velocidade porque não são gravadas no log de gravação antecipada. O Snowflake não é compatível com essa funcionalidade; portanto, a cláusula UNLOGGED será transformada em comentário.

Exemplo de código

Código de entrada:

Greenplum
CREATE UNLOGGED TABLE TABLE1 (
  COL1 integer
);
Copy

Código de saída:

Snowflake
CREATE
--       --** SSC-FDM-PG0005 - UNLOGGED TABLE IS NOT SUPPORTED IN SNOWFLAKE, DATA WRITTEN MAY HAVE DIFFERENT PERFORMANCE. **
--       UNLOGGED
                TABLE TABLE1 (
   COL1 integer
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "05/09/2025",  "domain": "no-domain-provided" }}';
Copy

Atributos da Coluna

Atributo CHECK

Perigo

Essa sintaxe não é compatível com o Snowflake.

A cláusula CHECK especifica uma expressão que produz um resultado booleano a que linhas novas ou atualizadas devem satisfazer para que uma operação de inserção ou atualização seja bem-sucedida. O Snowflake não tem uma equivalência com esta cláusula; o SnowConvert AI adicionará um EWI. Isto será aplicado como um atributo CHECK ou restrição de tabela.

Sintaxe da gramática

CHECK  ( <expression> )
Copy

Fonte da amostra

Código de entrada:

PostgreSQL
CREATE TABLE table1 (
    product_id INT PRIMARY KEY,
    quantity INT CHECK (quantity >= 0)
);
Copy

Código de saída:

Snowflake
CREATE TABLE table1 (
    product_id INT PRIMARY KEY,
    quantity INT
                 !!!RESOLVE EWI!!! /*** SSC-EWI-0035 - CHECK STATEMENT NOT SUPPORTED ***/!!! CHECK (quantity >= 0)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "05/09/2025",  "domain": "no-domain-provided" }}';
Copy

GENERATED BY DEFAULT AS IDENTITY

Dica

Essa sintaxe é totalmente compatível com o Snowflake.

Especifica que a coluna é uma coluna IDENTITY padrão e permite que você designe um valor exclusivo à coluna automaticamente.

Sintaxe da gramática

 GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( <sequence_options> ) ]
Copy

Fonte da amostra

Código de entrada:

PostgreSQL
CREATE TABLE table1 (
idValue INTEGER GENERATED ALWAYS AS IDENTITY)
Copy

Código de saída:

Snowflake
CREATE TABLE table1 (
idValue INTEGER IDENTITY(1, 1) ORDER
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "05/09/2025",  "domain": "no-domain-provided" }}'
Copy

Restrições de tabela

Chave primária, chave estrangeira e única

Aviso

Essa sintaxe é parcialmente compatível com o Snowflake.

O SnowConvert AI mantém as definições de restrição; entretanto, no Snowflake, chaves únicas, primárias e estrangeiras são usadas para documentação e não impõem restrições ou exclusividade. Eles ajudam a descrever relações de tabela, mas não afetam a integridade ou o desempenho dos dados.

Atributos da tabela

Opção de LIKE

Aviso

Essa sintaxe é parcialmente compatível com o Snowflake.

A cláusula LIKE especifica uma tabela da qual a nova tabela copia automaticamente todos os nomes de colunas, seus tipos de dados e suas restrições não nulas. O PostgreSQL é compatível com várias opções, mas o Snowflake não, de forma que o SnowConvert AI removerá as opções like.

Sintaxe da gramática

  LIKE source_table { INCLUDING | EXCLUDING }
  { AM | COMMENTS | CONSTRAINTS | DEFAULTS | ENCODING | GENERATED | IDENTITY | INDEXES | RELOPT | STATISTICS | STORAGE | ALL }
Copy

Amostra de padrões da origem

Código de entrada:

PostgreSQL
CREATE TABLE source_table (
    id INT,
    name VARCHAR(255),
    created_at TIMESTAMP,
    status BOOLEAN
);

CREATE TABLE target_table_no_constraints (LIKE source_table INCLUDING DEFAULTS EXCLUDING CONSTRAINTS EXCLUDING INDEXES);
Copy

Código de saída:

Snowflake
CREATE TABLE source_table (
    id INT,
    name VARCHAR(255),
    created_at TIMESTAMP,
    status BOOLEAN
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "05/12/2025",  "domain": "no-domain-provided" }}';
CREATE TABLE target_table_no_constraints LIKE source_table;
Copy

ON COMMIT

Aviso

Essa sintaxe é parcialmente suportada.

Especifica o comportamento da tabela temporária quando uma confirmação é feita.

Sintaxe da gramática

ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP }
Copy

Amostra de padrões da origem

Código de entrada:

PostgreSQL

CREATE GLOBAL TEMPORARY TABLE temp_data_delete (
    id INT,
    data TEXT
) ON COMMIT DELETE ROWS;
Copy

Código de saída:

Snowflake
CREATE TEMPORARY TABLE temp_data_delete (
    id INT,
    data TEXT
)
----** SSC-FDM-0008 - ON COMMIT NOT SUPPORTED **
--ON COMMIT DELETE ROWS
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "05/12/2025",  "domain": "no-domain-provided" }}';
Copy

PARTITION BY, USING, TABLESPACE e WITH

Nota

Essa sintaxe não é necessária no Snowflake.

Essas cláusulas no Snowflake são desnecessárias porque tratam o armazenamento de dados automaticamente, ao contrário do PostgreSQL, que podia ser configurado manualmente. Por esse motivo, essas cláusulas são removidas durante a migração.