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では、以下のシナリオのために、このプロパティを直接変換することはできません。
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');
最後のクエリはテーブルに影響するので、 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;
$$;
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;
$$;
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;
$$;
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;
$$;
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" }}';
SSC-FDM-PG0004
日付の出力形式が異なる場合があります
説明
The date output format may vary depending on the Timestamp type and the timestamp_output_format being used, see the Snowflake CURRENT_TIMESTAMP documentation.
コード例
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;
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;
結果
clock_timestamp() とSELECTの例。
PostgreSQL
select clock_timestamp();
Snowflake
ALTER SESSION SET timestamp_output_format = 'YYYY-MM-DD HH24:MI:SS.FF';
select
CURRENT_TIMESTAMP(3);
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
複数のスキーマで検索パスを設定します。
説明
Set search path with multiple schemas is not supported in Snowflake, see the Snowflake USE SCHEMA documentation.
コード例
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では、ギャップのないシーケンス番号の生成は保証されません。生成された数値は一貫して値が増加します(またはステップサイズが負の場合は値が減少します)が、必ずしも連続しているとは限りません。
コード例
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;
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;
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;
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で失敗することはありません。
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コマンドを保持しています。
コード例
生成コード:
----** 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)