SnowConvert AI - PostgreSQL - CREATE TABLE¶
PostgreSql에서 Snowflake로의 변환
적용 대상¶
PostgreSQL
Greenplum
Netezza
설명¶
PostgreSQL에 새 테이블을 만듭니다. 각각 고유한 데이터 타입을 보유하는 열 목록을 정의합니다. 테이블의 소유자는 CREATE TABLE 명령의 발급자입니다.
자세한 내용은 CREATE TABLE 설명서를 참조하세요.
문법 구문¶
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 [, ... ] ) ] }
테이블 옵션¶
TEMPORARY | TEMP 또는 IF NOT EXISTS¶
Hint
이 구문은 Snowflake에서 완벽하게 지원됩니다.
GLOBAL | LOCAL¶
참고
이 구문은 Snowflake에서는 필요하지 않습니다.
PostgreSQL의 설명서에 따르면 GLOBAL | LOCAL은 SQL 표준 호환성을 위해 존재하지만 PostgreSQL에는 아무런 영향도 미치지 않으며 더 이상 사용되지 않습니다. 그러한 이유로, SnowConvert AI는 마이그레이션 프로세스 중에 이러한 키워드를 제거합니다.
샘플 소스¶
입력 코드:
PostgreSQL¶
CREATE GLOBAL TEMP TABLE TABLE1 (
COL1 integer
);
출력 코드:
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" }}';
UNLOGGED TABLE¶
참고
이 구문은 Snowflake에서는 필요하지 않습니다.
UNLOGGED 테이블은 미리 쓰기 로그에 기록되지 않으므로 처리 속도가 크게 단축됩니다. Snowflake는 이 기능을 지원하지 않으므로 UNLOGGED 절은 주석 처리됩니다.
코드 예제¶
입력 코드:¶
Greenplum¶
CREATE UNLOGGED TABLE TABLE1 (
COL1 integer
);
출력 코드:¶
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" }}';
열 특성¶
CHECK 속성¶
위험
이 구문은 Snowflake에서 지원되지 않습니다.
CHECK 절은 삽입 또는 업데이트 작업이 성공하기 위해 새 행이나 업데이트된 행이 충족해야 하는 부울 결과를 생성하는 표현식을 지정합니다. Snowflake에는 이와 동등한 절이 없으며, SnowConvert AI는 EWI를 추가합니다. 이는 CHECK 특성 또는 테이블 제약 조건으로 적용됩니다.
문법 구문
CHECK ( <expression> )
샘플 소스¶
입력 코드:
PostgreSQL¶
CREATE TABLE table1 (
product_id INT PRIMARY KEY,
quantity INT CHECK (quantity >= 0)
);
출력 코드:
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" }}';
GENERATED BY DEFAULT AS IDENTITY¶
Hint
이 구문은 Snowflake에서 완벽하게 지원됩니다.
열을 기본 IDENTITY 열로 지정하며, 열에 자동으로 고유한 값을 할당할 수 있습니다.
문법 구문
GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( <sequence_options> ) ]
샘플 소스¶
입력 코드:
PostgreSQL¶
CREATE TABLE table1 (
idValue INTEGER GENERATED ALWAYS AS IDENTITY)
출력 코드:
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" }}'
테이블 제약 조건¶
기본 키, 외래 키, 고유 키¶
경고
이 구문은 Snowflake에서 부분적으로 지원됩니다.
SnowConvert AI는 제약 조건 정의를 유지합니다. 그러나 Snowflake에서는 고유 키, 기본 키 및 외래 키가 문서에 사용되며 제약 조건이나 고유성을 적용하지 않습니다. 테이블 관계를 설명하는 데 도움이 되지만 데이터 무결성이나 성능에 영향을 주지는 않습니다.
테이블 특성¶
LIKE 옵션¶
경고
이 구문은 Snowflake에서 부분적으로 지원됩니다.
LIKE 절은 새 테이블이 모든 열 이름, 해당 데이터 타입, null이 아닌 제약 조건을 자동으로 복사하는 테이블을 지정합니다. PostgreSQL은 여러 옵션을 지원하지만, Snowflake는 그렇지 않으므로 SnowConvert AI는 유사 옵션을 제거합니다.
문법 구문¶
LIKE source_table { INCLUDING | EXCLUDING }
{ AM | COMMENTS | CONSTRAINTS | DEFAULTS | ENCODING | GENERATED | IDENTITY | INDEXES | RELOPT | STATISTICS | STORAGE | ALL }
샘플 소스 패턴¶
입력 코드:
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);
출력 코드:
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;
ON COMMIT¶
경고
이 구문은 부분적으로 지원됩니다.
커밋이 완료될 때 임시 테이블의 동작을 지정합니다.
문법 구문¶
ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP }
샘플 소스 패턴¶
입력 코드:¶
PostgreSQL¶
CREATE GLOBAL TEMPORARY TABLE temp_data_delete (
id INT,
data TEXT
) ON COMMIT DELETE ROWS;
출력 코드:¶
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" }}';
PARTITION BY, USING, TABLESPACE 및 WITH¶
참고
이 구문은 Snowflake에서는 필요하지 않습니다.
이러한 절은 수동으로 설정할 수 있는 PostgreSQL과 달리 데이터 저장소를 자동으로 처리하므로 Snowflake에서는 불필요합니다. 이러한 이유로 이러한 절은 마이그레이션 중에 제거됩니다.