SnowConvert: Postgresの問題¶
SSC-EWI-PG0003¶
重大性¶
低
説明¶
PostgreSQL はテーブル継承をサポートしていますが、この機能はSnowflakeでは利用できません。PostgreSQL テーブル継承の詳細については、 こちら をご覧ください。
コード例¶
入力コード:¶
ALTER TABLE Table1
ADD CONSTRAINT const3 UNIQUE (zip);
出力コード:¶
!!!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-PG0013¶
重大性¶
中
説明¶
このエラーは、Raise例外をカスタムストアドプロシージャに変換するときに発生します。
例外ブロックの外で例外を発生させることは、Snowflakeではサポートされていません。これは、Snowflakeではリテラルメッセージによる例外の新規作成のみが可能で、動的データに基づくカスタム例外の作成はサポートされていないためです。
コード例¶
入力コード:¶
CREATE FUNCTION FunctionName1() RETURNS void
AS
$$
DECLARE
v_var1 character varying(50);
v_var2 character varying(50);
BEGIN
v_var1 := 'exception1';
v_var2 := 'exception2';
RAISE EXCEPTION 'Exception %',v_var1;
EXCEPTION
WHEN OTHERS THEN
RAISE EXCEPTION '%',v_var2;
RETURN;
END;
$$
LANGUAGE plpgsql NO SQL;
出力コード:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-GP0002 - NON-RETURNING FUNCTION TRANSLATED TO STORED PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE FunctionName1 () RETURNS STRING
LANGUAGE SQL
AS
$$
DECLARE
v_var1 character varying(50);
v_var2 character varying(50);
BEGIN
v_var1 := 'exception1';
v_var2 := 'exception2';
LET SC_RAISE_MESSAGE VARCHAR;
SC_RAISE_MESSAGE := STRING_FORMAT_UDF('Exception %', array_construct(:v_var1));
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0013 - RAISE EXCEPTION TRANSLATED TO USER-DEFINED STORED PROCEDURE CALL. ***/!!!
CALL RAISE_MESSAGE_UDF('EXCEPTION', :SC_RAISE_MESSAGE);
RETURN 'SUCCESS';
EXCEPTION
WHEN OTHER THEN
SC_RAISE_MESSAGE := STRING_FORMAT_UDF('%', array_construct(:v_var2));
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0013 - RAISE EXCEPTION TRANSLATED TO USER-DEFINED STORED PROCEDURE CALL. ***/!!!
CALL RAISE_MESSAGE_UDF('EXCEPTION', :SC_RAISE_MESSAGE);
RAISE;
RETURN;
END;
$$;
以下のユーザー定義関数(UDFs)は、変換処理中に使用されます。
CREATE OR REPLACE FUNCTION STRING_FORMAT_UDF(PATTERN VARCHAR, ARGS VARIANT)
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "udf", "convertedOn": "09/09/2024" }}'
AS
$$
var placeholder_str = "{%}";
var result = PATTERN.replace(/(?<!%)%(?!%)/g, placeholder_str).replace("%%","%");
for (var i = 0; i < ARGS.length; i++)
{
result = result.replace(placeholder_str, ARGS[i]);
}
return result;
$$;
CREATE OR REPLACE PROCEDURE RAISE_MESSAGE_UDF(LEVEL VARCHAR, MESSAGE VARCHAR)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "udf", "convertedOn": "09/09/2024" }}'
AS
$$
BEGIN
RETURN 'Logged message: ' || LEVEL || ' - ' || MESSAGE;
END;
$$;
推奨事項¶
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-PG0006¶
重大性¶
中
説明¶
このエラーは、 FOR ループの変数がラベル名で参照されている場合に発生します。Snowflakeでは、 FOR ループ内で修飾名を使用して変数を参照することはできません。
コード例¶
入力コード:¶
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;
$$;
出力コード:¶
CREATE OR REPLACE PROCEDURE procedure1 (result VARCHAR(100))
RETURNS VARIANT
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "02/16/2025", "domain": "test" }}'
AS $$
BEGIN
result := '<';
for i in 1 TO 3 loop
for i in 4 TO 6 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 || '>';
RETURN OBJECT_CONSTRUCT('result', :result);
END;
$$;
推奨事項¶
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-PG0002¶
重大性¶
低
説明¶
制約の以下のインデックスパラメーターは、Snowflakeと互換性がありません。
INCLUDE: 現在の操作にデータやオブジェクトを追加します。
WITH: 追加のプロパティまたは条件を指定します。
USING INDEX TABLESPACE: インデックスを格納するテーブルスペースを定義します。
コード例¶
入力コード:¶
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
);
出力コード:¶
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-PG0012¶
説明¶
既存のデータを検証することなく制約を追加または変更できる NOT VALID
オプションは、Snowflakeでは使用できません。この PostgreSQL 機能により、既存の記録の検証をスキップしながら制約を追加できます。
コード例¶
入力コード:¶
ALTER TABLE Table1 *
ADD CONSTRAINT const UNIQUE (zip) NOT VALID;
出力コード:¶
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-PG0009¶
重大性¶
低
説明¶
コメントは、元のコードのさまざまなオブジェクトに追加できます。しかし、これらのオブジェクトの一部はSnowflakeに存在しないため、そうしたコメントを追加する機能は利用できません。エラーを防ぐため、これらのサポートされていないコメントシナリオを処理するコードは無効になっています。
コード例¶
入力コード:¶
COMMENT ON RULE rule_name on TABLE_NAME IS 'this is a comment';
出力コード:¶
!!!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-PG0008¶
重大性¶
高
説明¶
Snowflakeの to_char
関数は、日付と時刻のデータ型をテキスト形式に変換する際の 間隔
パラメーターをサポートしていません。
コード例¶
入力コード:¶
SELECT to_char(interval '15h 2m 12s', 'HH24:MI:SS');
出力コード:¶
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-PG0005¶
重大性¶
中
説明¶
このエラーは、Snowflakeがソース言語と特定の関数で日付と数値の形式要件が異なるために発生します。
以下の日付と時刻の形式要素は、 Snowflake では他のデータベースと動作が異なる場合があります。
日付/時刻¶
Format Element | Description |
---|---|
HH | Hour of day (01–12). |
MS | Millisecond (000–999). |
US | Microsecond (000000–999999). |
SSSS, SSSSS | Seconds past midnight (0–86399). |
Y,YYY | Year (4 or more digits) with comma. |
YYY | Last 3 digits of year. |
Y | Last digit of year. |
IYYY | ISO 8601 week-numbering year(4 or more digits). |
IYY | Last 3 digits of ISO 8601 week-numbering year. |
IY | Last 2 digits of ISO 8601 week-numbering year. |
I | Last digit of ISO 8601 week-numbering year. |
BC, bc, AD or ad | Era indicator (without periods). |
B.C., b.c., A.D. or a.d. | Era indicator (with periods). |
MONTH | Full upper case month name (blank-padded to 9 chars). |
Month | Full capitalized month name (blank-padded to 9 chars). |
month | Full lower case month name (blank-padded to 9 chars). |
DAY | Full upper case day name (blank-padded to 9 chars). |
Day | Full capitalized day name (blank-padded to 9 chars). |
day | Full lower case day name (blank-padded to 9 chars). |
DDD | Day of year (001–366). |
IDDD | Day of ISO 8601 week-numbering year (001–371; day 1 of the year is Monday of the first ISO week). |
D | Day of the week, Sunday (1) to Saturday (7). |
ID | ISO 8601 day of the week, Monday (1) to Sunday (7). |
W | Week of month (1–5) (the first week starts on the first day of the month). |
WW | Week number of year (1–53) (the first week starts on the first day of the year). |
IW | Week number of ISO 8601 week-numbering year (01–53; the first Thursday of the year is in week 1). |
CC | Century (2 digits) (the twenty-first century starts on 2001-01-01). |
J | Julian Date. |
Q | Quarter. |
RM | Month in upper case Roman numerals (I–XII; I=January). |
rm | Month in lower case Roman numerals (i–xii; i=January). |
TZ | Upper case time-zone abbreviation (only supported in to_char ). |
tz | Lower case time-zone abbreviation (only supported in to_char ). |
TZH | Time-zone hours. |
TZM | Time-zone minutes. |
OF | Time-zone offset from UTC (only supported in to_char ). |
FM prefix | Fill mode (suppress leading zeroes and padding blanks). |
TH suffix | Upper case ordinal number suffix. |
th suffix | Lower case ordinal number suffix. |
FX prefix | Fixed format global option (see usage notes). |
TM prefix | Translation mode (use localized day and month names based on lc_time). |
SP suffix | Spell mode. |
詳細については、 PostgreSQL の日付/時刻形式 のドキュメントをご参照ください。
TO_CHAR 関数変換は、ほとんどの形式要素をサポートしています。サポートされる形式要素とそれに対応するマッピングの包括的なリストについては、 翻訳仕様 をご参照ください。
数値 ¶
パターン |
説明 |
---|---|
PR |
角括弧内の負の値 |
RN |
ローマ数字(1~3999の間で入力) |
TH またはth |
序数のサフィックス |
V |
シフト指定桁数(ノート参照) |
EEEE |
科学的記数法の指数 |
詳細については、 PostgreSQL 数値形式 のドキュメントをご参照ください。
コード例¶
入力コード:¶
SELECT
DATE_TRUNC('decade', TIMESTAMP '2017-03-17 02:09:30'),
DATE_TRUNC('century', TIMESTAMP '2017-03-17 02:09:30'),
DATE_TRUNC('millennium', TIMESTAMP '2017-03-17 02:09:30');
出力コード:¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - DECADE FORMAT IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
DATE_TRUNC('decade', TIMESTAMP '2017-03-17 02:09:30'),
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - CENTURY FORMAT IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
DATE_TRUNC('century', TIMESTAMP '2017-03-17 02:09:30'),
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - MILLENNIUM FORMAT IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
DATE_TRUNC('millennium', TIMESTAMP '2017-03-17 02:09:30');
推奨事項¶
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-PG0015¶
重大性¶
中
説明¶
PostgreSQL では、 INTO 句を使用せずに、 FETCH ステートメント を使用して、取得した行値を直接コンソールに表示することができます。ただし、Snowflakeを使用する場合は、 FETCH ステートメント に INTO 句を含めて、取得した値を格納する変数を指定する必要があります。
SnowConvert が INTO 句のない FETCH ステートメントに遭遇すると、エラー、警告、情報(EWI)メッセージが生成され、この FETCH 構文がサポートされていないことをユーザーに知らせます。
コード例¶
入力コード:¶
FETCH PRIOR FROM cursor1;
出力コード:¶
!!!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-PG0001¶
重大性¶
中
説明¶
このエラーは、 SnowConvert が age()
関数をサポートしていないために発生します。
コード例¶
入力コード:¶
SELECT
age(date1::date, date2::date)
FROM
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-PG0011¶
重大性¶
低
説明¶
PostgreSQL シーケンスステートメントには、Snowflakeの関数と互換性のないオプションがあります。
以下の機能は現在サポートされていません。
Unlogged: シーケンスは先書きログ(WAL)に書き込まれません
AS <data_type>: シーケンスのデータ型を指定します
MinValue: シーケンスの最小値を設定します
MaxValue: シーケンスの最大値を設定します
No MinValue: 最小値制限を解除します
No MaxValue: 最大値制限を解除します
Cashe: メモリに事前に割り当てるシーケンス番号の数を指定します
Cycle: シークエンスが制限に達したときに再スタートできるようにします
Owner By: シーケンスの所有権を特定のユーザーに割り当てます
コード例¶
入力コード:¶
CREATE UNLOGGED SEQUENCE sequence_name;
出力コード:¶
--** 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-PG0010¶
重大性¶
低
説明¶
PostgreSQL が仮シーケンスを作成すると、そのシーケンスは現在のセッションの間だけ存在し、セッションが終了すると自動的に削除されます。Snowflakeは仮シーケンスをサポートしていないため、 SC はそれらを正規シーケンスに変換します。同じ名前のシーケンスがすでにSnowflakeに存在する場合は、名前の衝突が発生し、エラーになる可能性があります。
コード例¶
入力コード:¶
CREATE TEMPORARY SEQUENCE sequence1;
CREATE TEMP SEQUENCE sequence2;
出力コード:¶
--** 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-PG0004¶
重大性¶
中
説明¶
PostgreSQL で利用可能な EXCLUDE 制約は、現在Snowflakeではサポートされていません。
コード例¶
入力コード:¶
CREATE TABLE Table1 (
id int,
EXCLUDE USING gist (id WITH &&)
);
出力コード:¶
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-PG0014¶
重大性¶
中程度
説明¶
Snowflakeでは、 FETCH カーソル ステートメントは、カーソルから次の行を取得します。コードを変換する際、 SnowConvert はカーソルナビゲーションコマンドを変換します。これらのコマンドはSnowflakeで同じ関数を実行するため、 FETCH NEXT と同等です。
FETCH NEXT
: 結果セットから次の行を取得します。FETCH FORWARD
: 次の行を取得するために前進します。FETCH RELATIVE 1
: 現在の位置から1行前進します。FETCH
(方向なし): デフォルトの前方移動を使用して次の行を取得します。
デフォルト以外の方向はサポートされていません。使用された場合、 FETCH ステートメントにはエラー、警告、情報(EWI)メッセージが表示されます。
コード例¶
入力コード:¶
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;
$$;
出力コード:¶
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 にお問い合わせください