SnowConvert AI - PostgreSQLの機能の違い

注釈

SnowConvert AI PostgreSQLは現在、TABLESとVIEWSの評価と変換をサポートしています。SnowConvert AIは他のタイプのステートメントも認識できますが、完全にはサポートしていません。

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

SSC-FDM-PG0001

FOUNDは、シナリオによってはSnowflakeで異なる動作をする可能性があります。

重大性

説明

PostgreSQLのFOUNDプロパティは、最後に実行されたクエリに基づくプロパティで、 INSERTUPDATEDELETEMERGESELECT INTOPERFORMFETCHFOR ループなど、いくつかのステートメントによって影響を受ける可能性があります。このプロパティの詳細については、 PostgreSQL documentation をご参照ください。

Snowflakeでは、以下のシナリオのために、このプロパティを直接変換することはできません。

  • INSERT

  • UPDATE

  • DELETE

  • MERGE

変換されたコードは、PostgreSQL FOUND プロパティと同じように動作するため、 SQLFOUND Snowflakeプロパティ( ドキュメントはこちら )になります。

以下のようなその他のケースの場合:

  • SELECT INTO

  • PERFORM

  • FETCH

変換されたコードはPostgreSQL FOUND プロパティのように動作するカスタムUDF( IS_FOUND_UDF )になります。

SQLFOUND が値を変更するのは、最後に実行されたクエリによって少なくとも1つの行が影響を受けた場合のみであるため、これが発生します。最後のクエリで行に変化がない場合、変更されません。

IS_FOUND_UDF は行を返すステートメントに対してのみ機能しますが、行が返されない場合は FALSE を返します。

SQLFOUND の例
INSERT INTO SampleTable (SampleColumn1)
VALUES ('SampleValue0.1');
Copy

最後のクエリはテーブルに影響するので、 SQLFOUND がPostgreSQLの機能に最も近いです。

IS_FOUND_UDF 例
SELECT SampleColumn FROM SampleTable;
Copy

最後のクエリは行を返しますが、何も変更しないので、 IS_FOUND_UDF() がPostgreSQLの機能に最も近いです。

IS_FOUND_UDF ソースコード
CREATE OR REPLACE FUNCTION FOUND_UDF() 
RETURNS BOOLEAN
LANGUAGE SQL
IMMUTABLE
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "udf",  "convertedOn": "09/09/2024" }}'
AS
$$
SELECT (count(*) != 0) FROM TABLE(result_scan(last_query_id()))
$$;
Copy

コード例

ステートメントを挿入する
PostgreSQL
-- Found property used with INSERT statement.
CREATE OR REPLACE PROCEDURE FoundUsingInsertProcedure()
LANGUAGE plpgsql
AS $$
BEGIN
    -- Insert into SampleTable
    INSERT INTO SampleTable (SampleColumn1)
    VALUES ('SampleValue0.1');

    SELECT FOUND;
END;
$$;
Copy
Snowflake
-- Found property used with INSERT statement.
CREATE OR REPLACE PROCEDURE FoundUsingInsertProcedure ()
RETURNS VARCHAR
LANGUAGE SQL
AS $$
BEGIN
    -- Insert into SampleTable
    INSERT INTO SampleTable (SampleColumn1)
    VALUES ('SampleValue0.1');

    SELECT
        SQLFOUND /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
END;
$$;
Copy
Updateステートメント:
PostgreSQL
 -- Found property used with UPDATE statement.
CREATE OR REPLACE PROCEDURE FoundUsingUpdateProcedure()
LANGUAGE plpgsql
AS
$$
    BEGIN
        UPDATE SampleTable 
        SET SampleColumn1 = 'SampleValue0.1' 
        WHERE SampleColumn1 = 'SampleValue0.1';
        SELECT FOUND;        
    END;
$$;
Copy
Snowflake
 -- Found property used with UPDATE statement.
CREATE OR REPLACE PROCEDURE FoundUsingUpdateProcedure ()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
    BEGIN
        UPDATE SampleTable
        SET SampleColumn1 = 'SampleValue0.1'
        WHERE SampleColumn1 = 'SampleValue0.1';
        SELECT
        SQLFOUND /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
    END;
$$;
Copy
Deleteステートメント:
PostgreSQL
 -- Found property used with DELETE statement.
CREATE OR REPLACE PROCEDURE FoundUsingDeleteProcedure()
LANGUAGE plpgsql
AS
$$
    BEGIN
        DELETE FROM SampleTable 
        WHERE SampleColumn1 = 'SampleValue0.1';
        SELECT FOUND;
    END;
$$;
Copy
Snowflake
 -- Found property used with DELETE statement.
CREATE OR REPLACE PROCEDURE FoundUsingDeleteProcedure ()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
    BEGIN
        DELETE FROM
            SampleTable
        WHERE SampleColumn1 = 'SampleValue0.1';
        SELECT
        SQLFOUND /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
    END;
$$;
Copy
Mergeステートメント:
PostgreSQL
 -- Found property used with MERGE statement.
CREATE OR REPLACE PROCEDURE FoundUsingMergeProcedure()
LANGUAGE plpgsql
AS
$$
    BEGIN
        MERGE INTO SampleTableB B
        USING (SELECT * FROM SampleTableA) A
        ON B.SampleColumn1 = A.SampleColumn2
        WHEN MATCHED THEN DELETE;
        SELECT FOUND;
    END;
$$;
Copy
Snowflake
 -- Found property used with MERGE statement.
CREATE OR REPLACE PROCEDURE FoundUsingMergeProcedure ()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
    BEGIN
        MERGE INTO SampleTableB B
        USING (SELECT * FROM SampleTableA) A
        ON B.SampleColumn1 = A.SampleColumn2
        WHEN MATCHED THEN DELETE !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'MergeStatement' NODE ***/!!!;
        SELECT
        SQLFOUND /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
    END;
$$;
Copy
ステートメントを選択する
PostgreSQL
 -- Found property used with SELECT INTO statement.
CREATE OR REPLACE PROCEDURE FoundUsingSelectIntoProcedure()
LANGUAGE plpgsql
AS
$$
    DECLARE 
        SampleNumber INTEGER;
    BEGIN
        SELECT 1 INTO SampleNumber;
        SELECT FOUND;
    END;
$$;
Copy
Snowflake
 -- Found property used with SELECT INTO statement.
CREATE OR REPLACE PROCEDURE FoundUsingSelectIntoProcedure ()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
    DECLARE
        SampleNumber INTEGER;
    BEGIN
        SELECT 1 INTO
        : SampleNumber;
        SELECT
        FOUND_UDF() /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
    END;
$$;
Copy
Performステートメント:
PostgreSQL
 -- Found property used with PERFORM statement.
CREATE OR REPLACE PROCEDURE FoundUsingPerformProcedure()
LANGUAGE plpgsql
AS
$$
    BEGIN
        PERFORM 1;
        RETURN FOUND;
    END;
$$;
Copy
Snowflake
 -- Found property used with PERFORM statement.
CREATE OR REPLACE PROCEDURE FoundUsingPerformProcedure ()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
    BEGIN
    SELECT
        1;
    RETURN FOUND_UDF() /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
    END;
$$;
Copy
ステートメントを取得する
PostgreSQL
 -- Found property used with FETCH statement.
CREATE OR REPLACE PROCEDURE FoundUsingFetchProcedure ()
LANGUAGE plpgsql
AS
$$
    DECLARE
        SampleRow VARCHAR;
        SampleCursor CURSOR FOR SELECT EmptyColumn FROM EmptyTable;
    BEGIN
        OPEN SampleCursor;
        FETCH SampleCursor;
        CLOSE SampleCursor;
        SELECT FOUND;
    END;
$$;
Copy
Snowflake
 -- Found property used with FETCH statement.
CREATE OR REPLACE PROCEDURE FoundUsingFetchProcedure ()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
    DECLARE
        SampleRow VARCHAR;
        SampleCursor CURSOR FOR SELECT EmptyColumn FROM
        EmptyTable;
    BEGIN
        OPEN SampleCursor;
    !!!RESOLVE EWI!!! /*** SSC-EWI-PG0015 - FETCH CURSOR WITHOUT TARGET VARIABLES IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
        FETCH SampleCursor;
        CLOSE SampleCursor;
        SELECT
        FOUND_UDF() /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
    END;
$$;
Copy

SSC-FDM-PG0002

Bpcharがvarcharに変換されました。

説明

この警告は、bpchar型(blank-padded char)がSnowflakeのvarcharデータ型と機能的同等性に差異がある可能性があるため、追加されました。しかし、どちらのデータ型も「n」文字の長さまで値を格納することができ、実際に格納されたデータ量だけストレージを消費します。主な違いは、データ末尾に空白がある場合に生じます。bpcharは空白を保存しませんが、snowflakeは保存します。

このため、RTRIM関数を使うことで、これらの空白が保存されないようにすることができます。しかし、機能が完全に同等でないケースも存在する可能性があります。

コード例

入力コード:
列の定義
CREATE TABLE table1 (
    col1 BPCHAR, 
    col2 BPCHAR(20)
);
Copy
明示的キャスト
SELECT 'Y'::BPCHAR;
SELECT 'Y   '::BPCHAR(20);
SELECT COL1::BPCHAR(20) FROM tbl;
Copy
生成されたコード:
列の定義
CREATE TABLE table1 (
    col1 VARCHAR /*** SSC-FDM-PG0002 - BPCHAR CONVERTED TO VARCHAR. THESE TYPES MAY HAVE SOME FUNCTIONAL DIFFERENCES. ***/,
    col2 VARCHAR(20) /*** SSC-FDM-PG0002 - BPCHAR CONVERTED TO VARCHAR. THESE TYPES MAY HAVE SOME FUNCTIONAL DIFFERENCES. ***/
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "09/17/2024" }}';
Copy
明示的キャスト
SELECT 'Y':: VARCHAR /*** SSC-FDM-PG0002 - BPCHAR CONVERTED TO VARCHAR. THESE TYPES MAY HAVE SOME FUNCTIONAL DIFFERENCES. ***/;

SELECT
    RTRIM( 'Y   ') :: VARCHAR(20) /*** SSC-FDM-PG0002 - BPCHAR CONVERTED TO VARCHAR. THESE TYPES MAY HAVE SOME FUNCTIONAL DIFFERENCES. ***/;

SELECT
    RTRIM( COL1) :: VARCHAR(20) /*** SSC-FDM-PG0002 - BPCHAR CONVERTED TO VARCHAR. THESE TYPES MAY HAVE SOME FUNCTIONAL DIFFERENCES. ***/
FROM
    tbl;
Copy

ベストプラクティス

  • rtrim 関数は、空白を保存したくない場合に、保存の違いを解決することができます。このケースは 明示的キャスト で処理されますが、手動で処理しなければならない他のシナリオがあるかもしれません。詳細については、Snowflakeの RTRIM に関するドキュメントをご参照ください。

SSC-FDM-PG0003

ByteaがBinaryに変換されました

説明

この警告が追加されたのは、byteaデータ型がバイナリに変換される際、サイズの上限が1GBから8MBへと大幅に縮小されるためです。

コード例

入力コード:
CREATE TABLE tbl(
    col BYTEA
);
Copy
生成されたコード:
CREATE TABLE tbl (
    col BINARY /*** SSC-FDM-PG0003 - BYTEA CONVERTED TO BINARY. SIZE LIMIT REDUCED FROM 1GB TO 8MB ***/
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "09/17/2024" }}';
Copy

ベストプラクティス

  • 詳細については、 Binaryデータ型 に関するSnowflakeのドキュメントをご参照ください。

SSC-FDM-PG0004

日付の出力形式が異なる場合があります

説明

日付の出力形式は、Timestamp型と使用されているtimestamp_output_formatによって異なる場合があるので、こちら をご参照ください。

コード例

入力コード:
PostgreSQL
CREATE TABLE table1 (
    dt_update timestamp without time zone DEFAULT clock_timestamp()
);
Copy
生成されたコード:
Snowflake
CREATE TABLE table1 (
    dt_update TIMESTAMP_NTZ DEFAULT CAST(
    --** SSC-FDM-PG0004 - THE DATE OUTPUT FORMAT MAY VARY DEPENDING ON THE TIMESTAMP TYPE AND THE TIMESTAMP_OUTPUT_FORMAT BEING USED. **
    CURRENT_TIMESTAMP() AS TIMESTAMP_NTZ)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "09/17/2024" }}';
Copy

サンプル

CREATE TABLE の例。

入力コード:

PostgreSQL
CREATE TABLE sample2 (
    platform_id integer NOT NULL,
    dt_update timestamp with time zone DEFAULT clock_timestamp()
);
    
insert into postgres.public.sample2 (platform_id) values (1);
   
select *, clock_timestamp() from postgres.public.sample2;
Copy
結果

platform_id

dt_update

clock_timestamp

1

2023-02-05 22:47:34.275 -0600

2023-02-05 23:16:15.754 -0600

生成されたコード:
Snowflake
CREATE TABLE sample2 (
    platform_id integer NOT NULL,
    dt_update TIMESTAMP_TZ DEFAULT CAST(
--** SSC-FDM-PG0004 - THE DATE OUTPUT FORMAT MAY VARY DEPENDING ON THE TIMESTAMP TYPE AND THE TIMESTAMP_OUTPUT_FORMAT BEING USED. **
CURRENT_TIMESTAMP() AS TIMESTAMP_TZ)
);

insert into postgres.public.sample2 (platform_id) values (1);
ALTER SESSION SET timestamp_output_format = 'YYYY-MM-DD HH24:MI:SS.FF';

select *,
CURRENT_TIMESTAMP(3)
from
postgres.public.sample2;
Copy
結果

PLATFORM_ID

DT_UPDATE

CURRENT_TIMESTAMP(3)

1

2023-02-05 20:52:30.082000000

2023-02-05 21:20:31.593

clock_timestamp() とSELECTの例。

入力コード
PostgreSQL
select clock_timestamp();
Copy
結果

clock_timestamp

2023-02-05 23:24:13.740

生成されたコード
Snowflake
ALTER SESSION SET timestamp_output_format = 'YYYY-MM-DD HH24:MI:SS.FF';
select
    CURRENT_TIMESTAMP(3);
Copy
結果

CURRENT_TIMESTAMP(3)

2023-02-05 21:29:24.258

SSC-FDM-PG0005

UNLOGGEDテーブルはSnowflakeではサポートされていません。

説明

PostgreSQLの UNLOGGED テーブルは、先行書き込みロギング(WAL)をスキップすることで、大幅なスピードアドバンテージを提供します。しかし、そのデータはミラーインスタンスにはレプリケートされません。Snowflakeはこの機能をサポートしていないので、 UNLOGGED 句はコメントアウトされます。

コード例

入力コード:
PostgreSQL
CREATE UNLOGGED TABLE TABLE1 (
   COL1 integer 
);
Copy
生成されたコード:
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": "greenplum",  "convertedOn": "04/21/2025",  "domain": "test" }}';
Copy

SSC-FDM-PG0006

複数のスキーマで検索パスを設定します。

説明

複数のスキーマを持つ検索パスの設定はSnowflakeではサポートされていません。 こちら をご参照ください。

コード例

入力コード:
PostgreSQL
 SET SEARCH_PATH TO schema1, schema2, schema3;
Copy
生成されたコード:
Snowflake
 --** SSC-FDM-PG0006 - SET SEARCH PATH WITH MULTIPLE SCHEMAS IS NOT SUPPORTED IN SNOWFLAKE **
USE SCHEMA schema1 /*, schema2, schema3*/;
Copy

SSC-FDM-PG0007

NULLは''に変換され、Snowflakeでは異なる動作をする可能性があります。

重大性

説明

PostgreSQLでは、コメントの削除は NULL を使用して処理されます。しかし、Snowflakeでは、コメントを削除する同様の方法として、空文字列の値 '' を代入することで同じ結果を得ることができます。このアプローチにより、コメントは同様の動作をする空文字列に効果的にマッピングされます。

コード例

入力コード:
PostgreSQL
 COMMENT ON TABLE mytable IS NULL;
Copy
生成されたコード:
Snowflake
 COMMENT ON TABLE mytable IS '' /*** SSC-FDM-PG0007 - NULL IS CONVERTED TO '' AND MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/;
Copy

SSC-FDM-PG0008

Select into unloggedテーブルはSnowflakeではサポートされていません。

説明

Select IntoはSnowflakeではサポートされていないため、この機能は CREATE TABLE AS でエミュレートされています。さらに、Snowflakeは常にトランザクションログを使用してテーブルを保護し、データの整合性と回復可能性を確保します。その結果、 UNLOGGED オプションを持つテーブルはSnowflakeではサポートされません。

コード例

入力コード:
PostgreSQL
select column1
      into UNLOGGED NewTable
      from oldTable;
Copy
生成されたコード:
Snowflake
CREATE TABLE IF NOT EXISTS NewTable AS
      select column1
--      --** SSC-FDM-PG0008 - SELECT INTO UNLOGGED TABLES ARE NOT SUPPORTED BY SNOWFLAKE. **
--            into UNLOGGED NewTable
            from
            oldTable;
Copy

SSC-FDM-PG0009

シーケンスのnextvalプロパティ。Snowflakeは、ギャップなしでシーケンス番号を生成することを保証しません。

説明

Snowflakeでは、ギャップのないシーケンス番号の生成は保証されません。生成された数値は一貫して値が増加します(またはステップサイズが負の場合は値が減少します)が、必ずしも連続しているとは限りません。

コード例

入力コード:
PostgreSQL
 SELECT nextval('seq1');
Copy
生成されたコード:
Snowflake
 SELECT seq1.nextval /*** SSC-FDM-PG0009 - THE SEQUENCE NEXTVAL PROPERTY SNOWFLAKE DOES NOT GUARANTEE GENERATING SEQUENCE NUMBERS WITHOUT GAPS. ***/;
Copy

SSC-FDM-PG0010

Datatype of the left operand could not be determined. Results may vary due to the behavior of Snowflake's bitwise function

説明

The bitwise operators << and >> are converted to the corresponding Snowflake functions BITSHIFTLEFT and BITSHIFTRIGHT. However, this transformation depends on knowing semantic information about the left operand, more specifically its datatype.

For shift operations involving integer left operands, the MOD function should be applied to the right operand to get equivalent results, as well as using the INTEGER_BITSHIFTLEFT_UDF helper for ensuring the equivalence of the shift left operation on integers. When the datatype of the left operand can not be determined, SnowConvert AI will generate this FDM to warn about the potential functional differences.

コード例

入力コード:
PostgreSQL
CREATE TABLE someTable (
  intCol INTEGER,
  smallIntCol SMALLINT,
  varbyteCol VARBYTE,
  incrementValue INTEGER
)
;

SELECT 
  intCol << incrementValue,
  smallIntCol >> incrementValue,
  varbyteCol << incrementValue
FROM someTable;


SELECT missingCol << incrementValue FROM missingTable;
Copy
生成されたコード:
Snowflake
CREATE TABLE someTable (
  intCol INTEGER,
  smallIntCol SMALLINT,
  varbyteCol BINARY,
  incrementValue INTEGER
)
;

SELECT
  PUBLIC.INTEGER_BITSHIFTLEFT_UDF(
  intCol, MOD(incrementValue, 32), 32),
  BITSHIFTRIGHT(
  smallIntCol, MOD(incrementValue, 16)),
  BITSHIFTLEFT(
  varbyteCol, incrementValue)
FROM
  someTable;

--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "missingTable" **
SELECT
  --** SSC-FDM-PG0010 - DATATYPE OF THE LEFT OPERAND COULD NOT BE DETERMINED. RESULTS MAY VARY DUE TO THE BEHAVIOR OF SNOWFLAKE'S BITSHIFTLEFT BITWISE FUNCTION **
  BITSHIFTLEFT( missingCol, incrementValue) FROM
  missingTable;
Copy

ベストプラクティス

  • Ensure the source code you migrate has no missing depedencies, by providing any missing object to SnowConvert AI the operands semantic information should be extracted correctly and this FDM should no longer appear

SSC-FDM-PG0011

このパターンマッチング条件では、COLLATE列制約の使用は無効になっています。

説明

このメッセージは、パターンマッチング条件がCOLLATE指定の引数を使用する場合に追加されます。これらの引数は現在、Snowflake の正規表現関数でサポートされていないためです。従って、この関数を使用するには、COLLATE句を無効にしなければなりません。

コード例

入力コード:
PostgreSQL
 CREATE TABLE collateTable (
col1 VARCHAR(20) COLLATE CASE_INSENSITIVE,
col2 VARCHAR(30) COLLATE CASE_SENSITIVE);

INSERT INTO collateTable values ('HELLO WORLD!', 'HELLO WORLD!');

SELECT
col1 SIMILAR TO 'Hello%' as ci,
col2 SIMILAR TO 'Hello%' as cs
FROM collateTable;
Copy
結果

CI

CS

TRUE

FALSE

出力コード:

Snowflake
 CREATE TABLE collateTable (
col1 VARCHAR(20) COLLATE 'en-ci',
col2 VARCHAR(30) COLLATE 'en-cs'
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "01/16/2025",  "domain": "test" }}';

INSERT INTO collateTable
values ('HELLO WORLD!', 'HELLO WORLD!');

SELECT
RLIKE(COLLATE(
--** SSC-FDM-PG0011 - THE USE OF THE COLLATE COLUMN CONSTRAINT HAS BEEN DISABLED FOR THIS PATTERN-MATCHING CONDITION. **
col1, ''), 'Hello.*', 's') as ci,
RLIKE(COLLATE(
--** SSC-FDM-PG0011 - THE USE OF THE COLLATE COLUMN CONSTRAINT HAS BEEN DISABLED FOR THIS PATTERN-MATCHING CONDITION. **
col2, ''), 'Hello.*', 's') as cs
FROM
collateTable;
Copy
結果

CI

CS

FALSE

FALSE

ベストプラクティス

  • これらのシナリオで同等性が必要な場合は、以下のパラメーターを手動で関数に追加することで、機能的な同等性を得ることができます。

    パラメーター

    説明

    c

    大文字と小文字を区別する一致

    i

    大文字と小文字を区別しない一致

  • 詳しくは次の リンク をご参照ください。

SSC-FDM-PG0012

NOT NULL制約が削除されました。この変数にNULLを代入しても失敗しなくなりました。

説明

In PostgreSQL, specifying the NOT NULL constraint ensures that assigning a null value to a variable results in a runtime error. Since this clause does not exist in Snowflake, it is removed during transformation and assigning a NULL to this variable will no longer fail in execution.

コード例

入力コード:
PostgreSQL
 CREATE OR REPLACE PROCEDURE variable_Not_Null()
LANGUAGE plpgsql
AS $$
DECLARE
    v_notnull VARCHAR NOT NULL DEFAULT 'Test default';
BEGIN
    v_notnull := NULL;
    -- Procedure logic
END;
$$;
Copy
結果

[22004] ERROR:NULLをNOT NULLが宣言された変数 "v_notnull" に代入できません

Generated Code:
Snowflake
 CREATE OR REPLACE PROCEDURE variable_Not_Null ()
RETURNS VARCHAR
LANGUAGE SQL
AS $$
DECLARE
    --** SSC-FDM-PG0012 - NOT NULL CONSTRAINT HAS BEEN REMOVED. ASSIGNING NULL TO THIS VARIABLE WILL NO LONGER CAUSE A FAILURE. **
    v_notnull VARCHAR DEFAULT 'Test default';
BEGIN
    v_notnull := NULL;
    -- Procedure logic
END;
$$;
Copy
Result

注意

この割り当てはSnowflakeで失敗することはありません。

ベストプラクティス

  • プロシージャのロジックを見直し、この変数に NULL 値が代入されていないことを確認します。

SSC-FDM-PG0013

Snowflakeで構文的にサポートされている機能だが、機能的に異なる場合があります。

説明

この機能差のメッセージは、Snowflakeが関数のシンタックスを(直接または同等のマッピングを通して)サポートしているものの、状況によってはその動作がオリジナルとは異なる可能性があることを示しています。

コード例

入力コード:
PostgreSQL
SELECT
    LISTAGG(skill) WITHIN GROUP (ORDER BY skill) OVER (PARTITION BY
    employee_name) AS employee_skills
FROM
    employees;
Copy
生成されたコード:
Snowflake
SELECT
--** SSC-FDM-PG0013 - FUNCTION SYNTACTICALLY SUPPORTED BY SNOWFLAKE BUT MAY HAVE FUNCTIONAL DIFFERENCES **
LISTAGG(skill) WITHIN GROUP (ORDER BY skill) OVER (PARTITION BY
employee_name) AS employee_skills
FROM
    employees;
Copy

ベストプラクティス

  • 特定のシナリオにおいてのみ差異が生じる可能性があるため、予期せぬ結果が生じないよう、機能動作を注意深く評価してください。

SSC-FDM-PG0014

不明な疑似型がText型に変換されました

説明

この機能差メッセージは、PostgreSQLで使用されているUNKNOWN疑似型がSnowflakeではサポートされておらず、Text型に変換されることを示しています。

コード例

入力コード:
PostgreSQL
CREATE TABLE PSEUDOTYPES
(
  COL1 UNKNOWN
)
Copy
生成されたコード:
Snowflake
CREATE TABLE PSEUDOTYPES (
  COL1 TEXT /*** SSC-FDM-PG0014 -  UNKNOWN PSEUDOTYPE TRANSFORMED TO TEXT TYPE ***/
)
Copy

ベストプラクティス

  • 未知のデータ型を持つ列の使用方法は、特定のシナリオで違いが生じる可能性があるため、慎重に評価してください。

SSC-FDM-PG0015

PSQLコマンドはSnowflakeでは適用されません。

説明

Snowflakeでは、 PSQLコマンドは適用されません。 実行には必要ありませんが、SnowConvert AIはコメントとして元のPSQLコマンドを保持しています。

コード例

入力コード:
 \set ON_ERROR_STOP TRUE
Copy
生成コード:
 ----** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. COMMAND OPTION **
--\set ON_ERROR_STOP TRUE
Copy

SSC-FDM-PG0016

強い型付けの配列は、型チェックなしでARRAYに変換されます。

説明

SnowConvert AIはこの警告を追加します。PostgreSQLは、組み込み型またはユーザー定義の基本型、列挙型、複合型、範囲型、ドメインの配列をサポートしていますが、Snowflakeはサポートしていないからです。Snowflakeでは、半構造化配列の各値はVARIANT型です。

コード例

入力コード:
CREATE TABLE sal_emp (
    name            text,
    pay_by_quarter  integer[],
    schedule        text[][]
);
Copy
生成コード:
CREATE TABLE sal_emp (
    name            text,
    pay_by_quarter ARRAY /*** SSC-FDM-PG0016 - STRONGLY TYPED ARRAY 'INTEGER[]' TRANSFORMED TO ARRAY WITHOUT TYPE CHECKING ***/,
    schedule ARRAY /*** SSC-FDM-PG0016 - STRONGLY TYPED ARRAY 'TEXT[][]' TRANSFORMED TO ARRAY WITHOUT TYPE CHECKING ***/
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "06/03/2025",  "domain": "no-domain-provided" }}';
Copy

SSC-FDM-PG0017

voidを返すユーザー定義関数がSnowflakeプロシージャに変換されました。

説明

SnowConvert AIはvoidを返す関数に対して警告を生成します。これは、voidを返す関数は一般的に、値を生成する操作ではなくプロシージャを示すためで、変換時に特別な処理が必要になることがあるからです。

コード例

入力コード:
CREATE OR REPLACE FUNCTION log_user_activity(
    user_id_param INT,
    action_param TEXT
)
RETURNS VOID AS $$
BEGIN
    INSERT INTO user_activity_log (user_id, action, activity_timestamp)
    VALUES (user_id_param, action_param, NOW());
END;
$$ LANGUAGE plpgsql;
Copy
生成コード:
--** SSC-FDM-PG0017 - USER DEFINED FUNCTION THAT RETURNS VOID WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **
CREATE OR REPLACE PROCEDURE log_user_activity (
user_id_param INT,
    action_param TEXT)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "07/23/2025",  "domain": "no-domain-provided" }}'
AS $$
BEGIN
    INSERT INTO user_activity_log (user_id, action, activity_timestamp)
    VALUES (:user_id_param, : action_param, CURRENT_TIMESTAMP());
END;
$$;
Copy

SSC-FDM-PG0018

Analyzeステートメントはコメントアウトされており、Snowflakeでは適用されません。

説明

SnowConvert AIは、ANALYZEステートメントに警告を表示し、コメントアウトします。PostgreSQLでは、テーブル統計情報を収集するためにANALYZEが使用されますが、Snowflakeはこのプロセスを自動的に管理するため、変換後のステートメントは冗長で、一般的に不要です。

コード例

入力コード:
ANALYZE customers (first_name, last_name)
Copy
生成コード:
----** SSC-FDM-PG0018 - ANALYZE STATEMENT IS COMMENTED OUT, WHICH IS NOT APPLICABLE IN SNOWFLAKE. **
--ANALYZE customers (first_name, last_name)
Copy

ベストプラクティス