SnowConvert AI - PostgreSQLの機能の違い¶
注釈
SnowConvert AI PostgreSQLは現在、TABLESとVIEWSの評価と変換をサポートしています。SnowConvert AIは他のタイプのステートメントも認識できますが、完全にはサポートしていません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-PG0001¶
FOUNDは、シナリオによってはSnowflakeで異なる動作をする可能性があります。
重大性¶
低
説明¶
PostgreSQLのFOUNDプロパティは、最後に実行されたクエリに基づくプロパティで、 INSERT 、 UPDATE 、 DELETE 、 MERGE 、 SELECT INTO 、 PERFORM 、 FETCH 、 FOR ループなど、いくつかのステートメントによって影響を受ける可能性があります。このプロパティの詳細については、 PostgreSQL documentation をご参照ください。
Snowflakeでは、以下のシナリオのために、このプロパティを直接変換することはできません。
INSERTUPDATEDELETEMERGE
変換されたコードは、PostgreSQL FOUND プロパティと同じように動作するため、 SQLFOUND Snowflakeプロパティ( ドキュメントはこちら )になります。
以下のようなその他のケースの場合:
SELECT INTOPERFORMFETCH
変換されたコードはPostgreSQL FOUND プロパティのように動作するカスタムUDF( IS_FOUND_UDF )になります。
SQLFOUND が値を変更するのは、最後に実行されたクエリによって少なくとも1つの行が影響を受けた場合のみであるため、これが発生します。最後のクエリで行に変化がない場合、変更されません。
IS_FOUND_UDF は行を返すステートメントに対してのみ機能しますが、行が返されない場合は FALSE を返します。
SQLFOUND の例¶
INSERT INTO SampleTable (SampleColumn1)
VALUES ('SampleValue0.1');
最後のクエリはテーブルに影響するので、 SQLFOUND がPostgreSQLの機能に最も近いです。
IS_FOUND_UDF 例¶
SELECT SampleColumn FROM SampleTable;
最後のクエリは行を返しますが、何も変更しないので、 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()))
$$;
コード例¶
ステートメントを挿入する¶
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;
$$;
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;
$$;
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;
$$;
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;
$$;
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;
$$;
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;
$$;
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;
$$;
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;
$$;
ステートメントを選択する¶
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;
$$;
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;
$$;
Performステートメント:¶
PostgreSQL¶
-- Found property used with PERFORM statement.
CREATE OR REPLACE PROCEDURE FoundUsingPerformProcedure()
LANGUAGE plpgsql
AS
$$
BEGIN
PERFORM 1;
RETURN FOUND;
END;
$$;
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;
$$;
ステートメントを取得する¶
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;
$$;
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;
$$;
SSC-FDM-PG0002¶
Bpcharがvarcharに変換されました。
説明¶
この警告は、bpchar型(blank-padded char)がSnowflakeのvarcharデータ型と機能的同等性に差異がある可能性があるため、追加されました。しかし、どちらのデータ型も「n」文字の長さまで値を格納することができ、実際に格納されたデータ量だけストレージを消費します。主な違いは、データ末尾に空白がある場合に生じます。bpcharは空白を保存しませんが、snowflakeは保存します。
このため、RTRIM関数を使うことで、これらの空白が保存されないようにすることができます。しかし、機能が完全に同等でないケースも存在する可能性があります。
コード例¶
入力コード:¶
列の定義¶
CREATE TABLE table1 (
col1 BPCHAR,
col2 BPCHAR(20)
);
明示的キャスト¶
SELECT 'Y'::BPCHAR;
SELECT 'Y '::BPCHAR(20);
SELECT COL1::BPCHAR(20) FROM tbl;
生成されたコード:¶
列の定義¶
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" }}';
明示的キャスト¶
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;
ベストプラクティス¶
SSC-FDM-PG0003¶
ByteaがBinaryに変換されました
説明¶
この警告が追加されたのは、byteaデータ型がバイナリに変換される際、サイズの上限が1GBから8MBへと大幅に縮小されるためです。
コード例¶
入力コード:¶
CREATE TABLE tbl(
col BYTEA
);
生成されたコード:¶
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" }}';
ベストプラクティス¶
詳細については、 Binaryデータ型 に関するSnowflakeのドキュメントをご参照ください。
SSC-FDM-PG0004¶
日付の出力形式が異なる場合があります
説明¶
日付の出力形式は、Timestamp型と使用されているtimestamp_output_formatによって異なる場合があるので、こちら をご参照ください。
コード例¶
入力コード:¶
PostgreSQL¶
CREATE TABLE table1 (
dt_update timestamp without time zone DEFAULT clock_timestamp()
);
生成されたコード:¶
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" }}';
サンプル¶
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;
結果¶
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;
結果¶
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();
結果¶
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);
結果¶
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
);
生成されたコード:¶
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" }}';
SSC-FDM-PG0006¶
複数のスキーマで検索パスを設定します。
説明¶
複数のスキーマを持つ検索パスの設定はSnowflakeではサポートされていません。 こちら をご参照ください。
コード例¶
入力コード:¶
PostgreSQL¶
SET SEARCH_PATH TO schema1, schema2, schema3;
生成されたコード:¶
Snowflake¶
--** SSC-FDM-PG0006 - SET SEARCH PATH WITH MULTIPLE SCHEMAS IS NOT SUPPORTED IN SNOWFLAKE **
USE SCHEMA schema1 /*, schema2, schema3*/;
SSC-FDM-PG0007¶
NULLは''に変換され、Snowflakeでは異なる動作をする可能性があります。
重大性¶
低
説明¶
PostgreSQLでは、コメントの削除は NULL を使用して処理されます。しかし、Snowflakeでは、コメントを削除する同様の方法として、空文字列の値 '' を代入することで同じ結果を得ることができます。このアプローチにより、コメントは同様の動作をする空文字列に効果的にマッピングされます。
コード例¶
入力コード:¶
PostgreSQL¶
COMMENT ON TABLE mytable IS NULL;
生成されたコード:¶
Snowflake¶
COMMENT ON TABLE mytable IS '' /*** SSC-FDM-PG0007 - NULL IS CONVERTED TO '' AND MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/;
SSC-FDM-PG0008¶
Select into unloggedテーブルはSnowflakeではサポートされていません。
説明¶
Select IntoはSnowflakeではサポートされていないため、この機能は CREATE TABLE AS でエミュレートされています。さらに、Snowflakeは常にトランザクションログを使用してテーブルを保護し、データの整合性と回復可能性を確保します。その結果、 UNLOGGED オプションを持つテーブルはSnowflakeではサポートされません。
コード例¶
入力コード:¶
PostgreSQL¶
select column1
into UNLOGGED NewTable
from oldTable;
生成されたコード:¶
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;
SSC-FDM-PG0009¶
シーケンスのnextvalプロパティ。Snowflakeは、ギャップなしでシーケンス番号を生成することを保証しません。
説明¶
Snowflakeでは、ギャップのないシーケンス番号の生成は保証されません。生成された数値は一貫して値が増加します(またはステップサイズが負の場合は値が減少します)が、必ずしも連続しているとは限りません。
コード例¶
入力コード:¶
PostgreSQL¶
SELECT nextval('seq1');
生成されたコード:¶
Snowflake¶
SELECT seq1.nextval /*** SSC-FDM-PG0009 - THE SEQUENCE NEXTVAL PROPERTY SNOWFLAKE DOES NOT GUARANTEE GENERATING SEQUENCE NUMBERS WITHOUT GAPS. ***/;
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;
生成されたコード:¶
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;
ベストプラクティス¶
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;
結果¶
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;
結果¶
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;
$$;
結果¶
[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;
$$;
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;
生成されたコード:¶
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;
ベストプラクティス¶
特定のシナリオにおいてのみ差異が生じる可能性があるため、予期せぬ結果が生じないよう、機能動作を注意深く評価してください。
SSC-FDM-PG0014¶
不明な疑似型がText型に変換されました
説明¶
この機能差メッセージは、PostgreSQLで使用されているUNKNOWN疑似型がSnowflakeではサポートされておらず、Text型に変換されることを示しています。
コード例¶
入力コード:¶
PostgreSQL¶
CREATE TABLE PSEUDOTYPES
(
COL1 UNKNOWN
)
生成されたコード:¶
Snowflake¶
CREATE TABLE PSEUDOTYPES (
COL1 TEXT /*** SSC-FDM-PG0014 - UNKNOWN PSEUDOTYPE TRANSFORMED TO TEXT TYPE ***/
)
ベストプラクティス¶
未知のデータ型を持つ列の使用方法は、特定のシナリオで違いが生じる可能性があるため、慎重に評価してください。
SSC-FDM-PG0015¶
PSQLコマンドはSnowflakeでは適用されません。
説明¶
Snowflakeでは、 PSQLコマンドは適用されません。 実行には必要ありませんが、SnowConvert AIはコメントとして元のPSQLコマンドを保持しています。
コード例¶
入力コード:¶
\set ON_ERROR_STOP TRUE
生成コード:¶
----** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. COMMAND OPTION **
--\set ON_ERROR_STOP TRUE
SSC-FDM-PG0016¶
強い型付けの配列は、型チェックなしでARRAYに変換されます。
説明¶
SnowConvert AIはこの警告を追加します。PostgreSQLは、組み込み型またはユーザー定義の基本型、列挙型、複合型、範囲型、ドメインの配列をサポートしていますが、Snowflakeはサポートしていないからです。Snowflakeでは、半構造化配列の各値はVARIANT型です。
コード例¶
入力コード:¶
CREATE TABLE sal_emp (
name text,
pay_by_quarter integer[],
schedule text[][]
);
生成コード:¶
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" }}';
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;
生成コード:¶
--** 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;
$$;
SSC-FDM-PG0018¶
Analyzeステートメントはコメントアウトされており、Snowflakeでは適用されません。
説明¶
SnowConvert AIは、ANALYZEステートメントに警告を表示し、コメントアウトします。PostgreSQLでは、テーブル統計情報を収集するためにANALYZEが使用されますが、Snowflakeはこのプロセスを自動的に管理するため、変換後のステートメントは冗長で、一般的に不要です。
コード例¶
入力コード:¶
ANALYZE customers (first_name, last_name)
生成コード:¶
----** SSC-FDM-PG0018 - ANALYZE STATEMENT IS COMMENTED OUT, WHICH IS NOT APPLICABLE IN SNOWFLAKE. **
--ANALYZE customers (first_name, last_name)
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください