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;
Copy
生成されたコード:
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;
Copy

ベストプラクティス

  • 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
);
Copy
生成されたコード:
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" }}';
Copy

ベストプラクティス

SSC-EWI-PG0003

継承はサポートされていません

重大性

説明

テーブル間の継承はPostgreSQLで認められていますが、Snowflakeではサポートされていません。PostgreSQLの継承についての詳細は こちら をクリックしてください。

コード例

入力コード:
PostgreSQL
 ALTER TABLE Table1
ADD CONSTRAINT const3 UNIQUE (zip);
Copy
生成されたコード:
Snowflake
 !!!RESOLVE EWI!!! /*** SSC-EWI-PG0003 - TABLE INHERITANCE IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
ALTER TABLE Table1
ADD CONSTRAINT const3 UNIQUE (zip);
Copy

ベストプラクティス

SSC-EWI-PG0004

Exclude制約はサポートされていません

重大性

説明

PostgreSQLで使用されているexclude制約はSnowflakeではサポートされていません。

コード例

入力コード:
PostgreSQL
 CREATE TABLE Table1 (
    id      int,
    EXCLUDE USING gist (id WITH &&)
);
Copy
生成されたコード:
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" }}';
Copy

ベストプラクティス

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;
$$;
Copy
生成されたコード:
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;
$$;
Copy

ベストプラクティス

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;
Copy
生成されたコード:
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;
$$;
Copy

ベストプラクティス

SSC-EWI-PG0008

to_char関数内でのintervalの使用はSnowflakeと互換性がありません。

重大性

説明

to_char 内の interval を使用して日付/時刻データ型をテキストに変換することは、Snowflakeではサポートされていません。

コード例

入力コード:
PostgreSQL
 SELECT to_char(interval '15h 2m 12s', 'HH24:MI:SS');
Copy
生成されたコード:
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. ***/!!!;
Copy

詳細は以下を参照してください

ベストプラクティス

SSC-EWI-PG0009

「型」へのコメントはSnowflakeではサポートされていません。

重大性

説明

元のコードでは、コメントを受け取ることができるさまざまなオブジェクトがあります。しかし、Snowflakeでは、これらのオブジェクトのいくつかは存在しないため、コメントを割り当てることができません。これらのシナリオを処理するコードは、潜在的なエラーを防ぐためにコメントアウトされています。

コード例

入力コード:
PostgreSql
 COMMENT ON RULE rule_name on TABLE_NAME IS 'this is a comment';
Copy
生成されたコード:
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';
Copy

ベストプラクティス

SSC-EWI-PG0010

一時シーケンスの作成はSnowflakeではサポートされていません

重大性

説明

PostgreSQLで一時シーケンスが作成されると、それはアクティブなセッションに対してのみ作成され、セッションからログアウトすると自動的に削除されます。しかし、この機能はSnowflakeでは利用できないため、通常のシーケンスとして生成されます。実行時、類似のシーケンス名が既に存在する可能性があり、既存のオブジェクトに対してはエラーとなります。

コード例

入力コード:
PostgreSQL
 CREATE TEMPORARY SEQUENCE sequence1;
CREATE TEMP SEQUENCE sequence2;
Copy
生成されたコード:
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;
Copy

ベストプラクティス

  • 作成に問題がある場合は、競合を避けるためにシーケンスの名前を変えてみるとよいです。

  • さらにサポートが必要な場合は、 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;
Copy
生成されたコード:
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;
Copy

ベストプラクティス

SSC-EWI-PG0012

NOT VALID制約オプションはSnowflakeではサポートされていません。

説明

NOT VALID 制約オプションは、制約を追加または変更するコンテキストで使用され、既存のデータが制約に準拠しているかどうかをチェックせずに制約を追加または変更する必要があることを示します。この句はSnowflakeではサポートされていません。

コード例

入力コード:
PostgreSQL
 ALTER TABLE Table1 *
ADD CONSTRAINT const UNIQUE (zip) NOT VALID;
Copy
生成されたコード:
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;
Copy

ベストプラクティス

  • ユーザーによる追加のアクションは必要ありません。

  • さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください

SSC-EWI-PG0014

Snowflakeスクリプトのカーソルは、フェッチ方向をサポートしていません。

重大性

説明

Snowflakeでは、 FETCH cursor ステートメントは常にカーソルの次の行をフェッチします。コードを変換する際、SnowConvert AIはFETCH NEXTと等価なカーソルの向きを変換します。Snowflakeでは機能的に等価であるためです。つまり:

  • FETCH NEXT

  • FETCH FORWARD

  • FETCH RELATIVE 1

  • FETCH (方向指定なし)

それ以外の方向はサポートされていないため、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;
$$;
Copy
生成されたコード:
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;
$$;
Copy

ベストプラクティス

SSC-EWI-PG0015

ターゲット変数なしのFetch cursorはSnowflakeではサポートされていません

重大性

説明

PostgreSQLでは、INTOを使わずに、 FETCHステートメント を使って、取得した行の値をコンソールに表示することができます。しかし、Snowflakeでは、 FETCHステートメント で、取得した行の値を格納する変数をINTO句で指定する必要があります。

コード内にINTOのないFETCHが見つかるたびに、SnowConvert AIはこのEWIを生成し、このタイプのFETCHがサポートされていないことをユーザーに通知します。

コード例

入力コード:
PostgreSQL
 FETCH PRIOR FROM cursor1;
Copy
生成されたコード:
Snowflake
 !!!RESOLVE EWI!!! /*** SSC-EWI-PG0015 - FETCH CURSOR WITHOUT TARGET VARIABLES IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FETCH PRIOR FROM cursor1;
Copy

ベストプラクティス

SSC-EWI-PG0016

Bit String型がVarchar型に変換されました

重大性

説明

PostgreSQLから移行する場合、BIT String型と関連する関数はSnowflakeではネイティブにサポートされていないことに注意してください。これらのデータタイプは、SnowflakeのVARCHARに変換されます。この変換は、これらの列のビット操作に依存するPostgreSQLクエリやアプリケーションロジックは、Snowflakeで同じ機能を実現するために大幅な修正が必要になることを意味します。

コード例

入力コード:
PostgreSQL
 CREATE TABLE table1 (
   col1 bit(10)
);
Copy
生成されたコード:
Snowflake
 CREATE TABLE table1 (
   col1 CHARACTER(10) !!!RESOLVE EWI!!! /*** SSC-EWI-PG0016 - BIT DATA TYPE CONVERTED TO CHARACTER ***/!!!
);
Copy

ベストプラクティス