SnowConvert AI - PostgreSQL 問題¶
注釈
変換範囲
SnowConvert AI PostgreSQLでは、主にTABLESとVIEWSを対象に評価と変換を行っています。SnowConvert AIは他のタイプのANSI標準ステートメントを認識することができますが、これらの変換はまだ完全にはサポートされていません。つまり、このツールはそれらを識別することはできても、サポートされていないコードユニットに対しては完全な変換を行うことはできません。
SSC-EWI-PG0001¶
AgeはSnowflakeではサポートされていません。
重大性¶
中
説明¶
このエラーは、SnowConvert AIが age() の機能をサポートしていないために追加されました。
コード例¶
入力コード:¶
PostgreSQL¶
SELECT
age(date1::date, date2::date)
FROM
Table1;
生成されたコード:¶
Snowflake¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "age", "Table1" **
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0001 - AGE IS NOT SUPPORTED ON SNOWFLAKE. ***/!!!
AGE(date1::date, date2::date)
FROM
Table1;
ベストプラクティス¶
Datediff時間関数は、クエリの目的が特定の値の範囲を取得することであるいくつかのケースを解決することができますが、これは各シナリオごとに手動で処理しなければなりません。詳細については、 Datediff に関するSnowflakeのドキュメントをご参照ください。さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-EWI-PG0002¶
制約インデックスパラメータがサポートされてません
重大性¶
低
説明¶
制約における以下のインデックスパラメーターの使用は、Snowflakeではサポートされていません。
INCLUDE
WITH
USING INDEX TABLESPACE
コード例¶
入力コード:¶
PostgreSQL¶
CREATE TABLE Table1 (
code char(5),
date_prod date,
CONSTRAINT production UNIQUE(date_prod) INCLUDE(code)
);
CREATE TABLE Table2 (
name varchar(40),
UNIQUE(name) WITH (fillfactor=70)
);
CREATE TABLE Table3 (
name varchar(40),
PRIMARY KEY(name) USING INDEX TABLESPACE tablespace_name
);
生成されたコード:¶
Snowflake¶
CREATE TABLE Table1 (
code char(5),
date_prod date,
CONSTRAINT production UNIQUE(date_prod)
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0002 - INCLUDE PARAMETER NOT APPLICABLE. CONSTRAINT INDEX PARAMETERS ARE NOT SUPPORTED IN SNOWFLAKE. ***/!!! INCLUDE(code)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "postgresql", "convertedOn": "09/17/2024" }}';
CREATE TABLE Table2 (
name varchar(40),
UNIQUE(name)
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0002 - WITH PARAMETER NOT APPLICABLE. CONSTRAINT INDEX PARAMETERS ARE NOT SUPPORTED IN SNOWFLAKE. ***/!!! WITH (fillfactor=70)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "postgresql", "convertedOn": "09/17/2024" }}';
CREATE TABLE Table3 (
name varchar(40),
PRIMARY KEY(name)
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0002 - USING PARAMETER NOT APPLICABLE. CONSTRAINT INDEX PARAMETERS ARE NOT SUPPORTED IN SNOWFLAKE. ***/!!! USING INDEX TABLESPACE tablespace_name
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "postgresql", "convertedOn": "09/17/2024" }}';
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-EWI-PG0003¶
継承はサポートされていません
重大性¶
低
説明¶
テーブル間の継承はPostgreSQLで認められていますが、Snowflakeではサポートされていません。PostgreSQLの継承についての詳細は こちら をクリックしてください。
コード例¶
入力コード:¶
PostgreSQL¶
ALTER TABLE Table1
ADD CONSTRAINT const3 UNIQUE (zip);
生成されたコード:¶
Snowflake¶
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0003 - TABLE INHERITANCE IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
ALTER TABLE Table1
ADD CONSTRAINT const3 UNIQUE (zip);
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-EWI-PG0004¶
Exclude制約はサポートされていません
重大性¶
中
説明¶
PostgreSQLで使用されているexclude制約はSnowflakeではサポートされていません。
コード例¶
入力コード:¶
PostgreSQL¶
CREATE TABLE Table1 (
id int,
EXCLUDE USING gist (id WITH &&)
);
生成されたコード:¶
Snowflake¶
CREATE TABLE Table1 (
id int,
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0004 - EXCLUDE CONSTRAINT IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
EXCLUDE USING gist (id WITH &&)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "postgresql", "convertedOn": "09/17/2024" }}';
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-EWI-PG0006¶
ラベルを使用した変数への参照はSnowflakeではサポートされていません。
重大性¶
中
説明¶
このエラーは、FORループのボディがラベルを使用して変数を参照する場合に追加されます。Snowflakeは、修飾名を使用した変数の参照をサポートしていません。
コード例¶
入力コード:¶
PostgreSQL¶
CREATE OR REPLACE PROCEDURE procedure1(out result VARCHAR(100))
LANGUAGE plpgsql
AS $$
BEGIN
result := '<';
<<outer_loop>>
for i in 1..3 loop
<<inner_loop>>
for i in 4..6 loop
result := result || '(' || outer_loop.i || ', ' || i || ')';
end loop inner_loop;
end loop outer_loop;
result := result || '>';
END;
$$;
生成されたコード:¶
Snowflake¶
CREATE OR REPLACE PROCEDURE procedure1 (result OUT VARCHAR(100))
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "postgresql", "convertedOn": "07/16/2025", "domain": "no-domain-provided" }}'
AS $$
BEGIN
result := '<';
for i in 1 TO 3
--** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
loop
for i in 4 TO 6
--** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
loop
result := result || '(' ||
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0006 - REFERENCE TO A VARIABLE USING THE LABEL IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! outer_loop.i || ', ' || i || ')';
end loop inner_loop;
end loop outer_loop;
result := result || '>';
END;
$$;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-EWI-PG0007¶
Dynamic SQLのInto句はSnowflakeではサポートされていません。
重大性¶
低
説明¶
PostgreSQL Dynamic SQLでは、 INTO 句でクエリ結果を変数に格納することができます。Snowflakeはこの機能をサポートしていません。したがって、 INTO 句にはEWI' のフラグが付けられます。
コード例¶
入力コード:¶
PosgreSQL¶
CREATE OR REPLACE PROCEDURE get_max_id(table_name VARCHAR, OUT max_id INTEGER)
AS $$
DECLARE
sql_statement VARCHAR;
BEGIN
sql_statement := 'SELECT MAX(id) FROM ' || table_name || ';';
EXECUTE sql_statement INTO max_id;
END;
$$ LANGUAGE plpgsql;
生成されたコード:¶
Snowflake¶
CREATE OR REPLACE PROCEDURE get_max_id (table_name VARCHAR, max_id OUT INTEGER)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "postgresql", "convertedOn": "07/16/2025", "domain": "no-domain-provided" }}'
AS $$
DECLARE
sql_statement VARCHAR;
BEGIN
sql_statement := 'SELECT MAX(id) FROM ' || table_name || ';';
EXECUTE IMMEDIATE sql_statement
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0007 - INTO CLAUSE IN DYNAMIC SQL IS NOT SUPPORTED IN SNOWFLAKE. ***/!!! INTO max_id;
END;
$$;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-EWI-PG0008¶
to_char関数内でのintervalの使用はSnowflakeと互換性がありません。
重大性¶
高
説明¶
to_char 内の interval を使用して日付/時刻データ型をテキストに変換することは、Snowflakeではサポートされていません。
コード例¶
入力コード:¶
PostgreSQL¶
SELECT to_char(interval '15h 2m 12s', 'HH24:MI:SS');
生成されたコード:¶
Snowflake¶
SELECT to_char(INTERVAL '15h, 2m, 12s', 'HH24:MI:SS') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0008 - THE USE OF INTERVAL WITHIN TO_CHAR IS NOT SUPPORTED BY SNOWFLAKE. ***/!!!;
詳細は以下を参照してください
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-EWI-PG0009¶
「型」へのコメントはSnowflakeではサポートされていません。
重大性¶
低
説明¶
元のコードでは、コメントを受け取ることができるさまざまなオブジェクトがあります。しかし、Snowflakeでは、これらのオブジェクトのいくつかは存在しないため、コメントを割り当てることができません。これらのシナリオを処理するコードは、潜在的なエラーを防ぐためにコメントアウトされています。
コード例¶
入力コード:¶
PostgreSql¶
COMMENT ON RULE rule_name on TABLE_NAME IS 'this is a comment';
生成されたコード:¶
Snowflake¶
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0009 - COMMENT ON 'RULE' IS NOT SUPPORTED BY SNOWFLAKE. ***/!!!
COMMENT ON RULE rule_name on TABLE_NAME IS 'this is a comment';
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-EWI-PG0010¶
一時シーケンスの作成はSnowflakeではサポートされていません
重大性¶
低
説明¶
PostgreSQLで一時シーケンスが作成されると、それはアクティブなセッションに対してのみ作成され、セッションからログアウトすると自動的に削除されます。しかし、この機能はSnowflakeでは利用できないため、通常のシーケンスとして生成されます。実行時、類似のシーケンス名が既に存在する可能性があり、既存のオブジェクトに対してはエラーとなります。
コード例¶
入力コード:¶
PostgreSQL¶
CREATE TEMPORARY SEQUENCE sequence1;
CREATE TEMP SEQUENCE sequence2;
生成されたコード:¶
Snowflake¶
--** SSC-FDM-PG0009 - THE SEQUENCE NEXTVAL PROPERTY SNOWFLAKE DOES NOT GUARANTEE GENERATING SEQUENCE NUMBERS WITHOUT GAPS. **
CREATE TEMPORARY !!!RESOLVE EWI!!! /*** SSC-EWI-PG0010 - CREATE TEMPORARY SEQUENCE IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! SEQUENCE sequence1;
--** SSC-FDM-PG0009 - THE SEQUENCE NEXTVAL PROPERTY SNOWFLAKE DOES NOT GUARANTEE GENERATING SEQUENCE NUMBERS WITHOUT GAPS. **
CREATE TEMP !!!RESOLVE EWI!!! /*** SSC-EWI-PG0010 - CREATE TEMPORARY SEQUENCE IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! SEQUENCE sequence2;
ベストプラクティス¶
作成に問題がある場合は、競合を避けるためにシーケンスの名前を変えてみるとよいです。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-PG0011¶
シーケンスオプション「option_name」はSnowflakeではサポートされていません。
重大性¶
低
説明¶
PostgreSQLのシーケンスステートメントに関する一部のオプションは、Snowflakeではサポートされていません。
サポートされていないオプションは以下の通りです。
Unlogged
AS <data_type>
MinValue
MaxValue
No MinValue
No MaxValue
Cache
Cycle
Owner By
コード例¶
入力コード:¶
PostgreSQL¶
CREATE UNLOGGED SEQUENCE sequence_name;
生成されたコード:¶
Snowflake¶
--** SSC-FDM-PG0009 - THE SEQUENCE NEXTVAL PROPERTY SNOWFLAKE DOES NOT GUARANTEE GENERATING SEQUENCE NUMBERS WITHOUT GAPS. **
CREATE UNLOGGED !!!RESOLVE EWI!!! /*** SSC-EWI-PG0011 - 'UNLOGGED' IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! SEQUENCE sequence_name;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-EWI-PG0012¶
NOT VALID制約オプションはSnowflakeではサポートされていません。
説明¶
NOT VALID 制約オプションは、制約を追加または変更するコンテキストで使用され、既存のデータが制約に準拠しているかどうかをチェックせずに制約を追加または変更する必要があることを示します。この句はSnowflakeではサポートされていません。
コード例¶
入力コード:¶
PostgreSQL¶
ALTER TABLE Table1 *
ADD CONSTRAINT const UNIQUE (zip) NOT VALID;
生成されたコード:¶
Snowflake¶
ALTER TABLE Table1
ADD CONSTRAINT const UNIQUE (zip)
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0012 - NOT VALID CONSTRAINT OPTION IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! NOT VALID;
ベストプラクティス¶
ユーザーによる追加のアクションは必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-EWI-PG0014¶
Snowflakeスクリプトのカーソルは、フェッチ方向をサポートしていません。
重大性¶
中
説明¶
Snowflakeでは、 FETCH cursor ステートメントは常にカーソルの次の行をフェッチします。コードを変換する際、SnowConvert AIはFETCH NEXTと等価なカーソルの向きを変換します。Snowflakeでは機能的に等価であるためです。つまり:
FETCH NEXTFETCH FORWARDFETCH RELATIVE 1FETCH(方向指定なし)
それ以外の方向はサポートされていないため、FETCHステートメントはこのEWIでマークされます。
コード例¶
入力コード:¶
PostgreSQL¶
CREATE OR REPLACE PROCEDURE cursor_test()
AS $$
BEGIN
FETCH FORWARD FROM cursor1 INTO my_var;
FETCH FIRST FROM cursor1 INTO my_var;
FETCH LAST FROM cursor1 INTO my_var;
END;
$$;
生成されたコード:¶
Snowflake¶
CREATE OR REPLACE PROCEDURE cursor_test ()
RETURNS VARCHAR
AS $$
BEGIN
FETCH
cursor1 INTO my_var;
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0014 - SNOWFLAKE SCRIPTING CURSORS DO NOT SUPPORT FETCH ORIENTATION. ***/!!!
FETCH FIRST FROM cursor1 INTO my_var;
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0014 - SNOWFLAKE SCRIPTING CURSORS DO NOT SUPPORT FETCH ORIENTATION. ***/!!!
FETCH LAST FROM cursor1 INTO my_var;
END;
$$;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-EWI-PG0015¶
ターゲット変数なしのFetch cursorはSnowflakeではサポートされていません
重大性¶
中
説明¶
PostgreSQLでは、INTOを使わずに、 FETCHステートメント を使って、取得した行の値をコンソールに表示することができます。しかし、Snowflakeでは、 FETCHステートメント で、取得した行の値を格納する変数をINTO句で指定する必要があります。
コード内にINTOのないFETCHが見つかるたびに、SnowConvert AIはこのEWIを生成し、このタイプのFETCHがサポートされていないことをユーザーに通知します。
コード例¶
入力コード:¶
PostgreSQL¶
FETCH PRIOR FROM cursor1;
生成されたコード:¶
Snowflake¶
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0015 - FETCH CURSOR WITHOUT TARGET VARIABLES IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FETCH PRIOR FROM cursor1;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-EWI-PG0016¶
Bit String型がVarchar型に変換されました
重大性¶
低
説明¶
PostgreSQLから移行する場合、BIT String型と関連する関数はSnowflakeではネイティブにサポートされていないことに注意してください。これらのデータタイプは、SnowflakeのVARCHARに変換されます。この変換は、これらの列のビット操作に依存するPostgreSQLクエリやアプリケーションロジックは、Snowflakeで同じ機能を実現するために大幅な修正が必要になることを意味します。
コード例¶
入力コード:¶
PostgreSQL¶
CREATE TABLE table1 (
col1 bit(10)
);
生成されたコード:¶
Snowflake¶
CREATE TABLE table1 (
col1 CHARACTER(10) !!!RESOLVE EWI!!! /*** SSC-EWI-PG0016 - BIT DATA TYPE CONVERTED TO CHARACTER ***/!!!
);
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください