SQL Server を PostgreSQL に変換
SSMS の「スクリプトの生成」でスキーマとデータを含めて書き出したスクリプト (.sql または .sql.gz、UTF-16 または UTF-8) をドロップすると、同じテーブル、キー、インデックス、データを持つ PostgreSQL スクリプトをダウンロードできます。PostgreSQL がそのまま保持できない値と、引き継がないオブジェクトは、すべてレポートに記載されます。
18 行を変換、修正 3 件、却下なし
shop_2024_sqlserver.sql のテーブルSQL Server のダンプ · SQL Server Management Objects で作成 · utf-8
orders10 行2
11 列 id integer not null customer_id integer not null status varchar(10) not null total numeric(19,4) not null items smallint not null ordered_at timestamp(0) not null shipped_at timestamp(6) note text details text order_ref uuid not null total_with_tax numeric(12,2) customers8 行1
8 列 id integer not null name varchar(100) not null email varchar(200) not null country varchar(2) not null is_active boolean not null signed_up date created_at timestamptz(0) not null row_version bytea
未変換
- ビュー paid_orders
- トリガー orders_no_negative
これらはデータベースごとに独自の言語で書かれます。PostgreSQL 用に書き直してください。
-- Written by IntoSQL from a SQL Server dump. Load it with: psql -v ON_ERROR_STOP=1 -f <file>
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET synchronous_commit = off;
SET maintenance_work_mem = '512MB';
CREATE TABLE orders (
id integer GENERATED BY DEFAULT AS IDENTITY NOT NULL,
customer_id integer NOT NULL,
status varchar(10) DEFAULT 'pending' NOT NULL,
total numeric(19,4) NOT NULL,
items smallint DEFAULT 1 NOT NULL,
ordered_at timestamp(0) NOT NULL,
shipped_at timestamp(6),
note text,
details text,
order_ref uuid DEFAULT (gen_random_uuid()::text) NOT NULL,
total_with_tax numeric(12,2) GENERATED ALWAYS AS ((cast(total * (1.16) AS numeric(12,2)))::numeric(12,2)) STORED,
CONSTRAINT orders_items_check CHECK (items >= 0),
CONSTRAINT orders_check2 CHECK (status = 'cancelled' OR status = 'shipped' OR status = 'paid' OR status = 'pending'),
CONSTRAINT orders_check3 CHECK (total >= (0))
);
CREATE TABLE customers (
id integer GENERATED BY DEFAULT AS IDENTITY NOT NULL,
name varchar(100) NOT NULL,
email varchar(200) NOT NULL,
country varchar(2) DEFAULT 'US' NOT NULL,
is_active boolean DEFAULT true NOT NULL,
signed_up date,
created_at timestamptz(0) DEFAULT CURRENT_TIMESTAMP NOT NULL,
row_version bytea
);
COPY customers (id, name, email, country, is_active, signed_up, created_at) FROM stdin;
1 Ana Martínez ana@example.com MX t 2023-01-15 2023-01-15 10:24:00.000000+00:00
2 Zoë Müller zoe@example.de DE t 2023-02-03 2023-02-03 08:11:42.000000+00:00
3 José Peña jose@example.es ES f 2023-03-21 2023-03-21 19:05:17.000000+00:00
4 李雷 lilei@example.cn CN t 2023-05-09 2023-05-09 02:40:00.000000+00:00
5 Noah O'Brien noah@example.ie IE t \N 2023-06-30 14:00:00.000000+00:00
6 Amélie Laurent amelie@example.fr FR t 2024-01-02 2024-01-02 09:30:00.000000+00:00
7 Ravi Patel ravi@example.in IN f 2024-02-29 2024-02-29 23:59:59.000000+00:00
8 Sofia Rossi 🌻 sofia@example.it IT t 2024-04-12 2024-04-12 12:12:12.000000+00:00
\.
COPY orders (id, customer_id, status, total, items, ordered_at, shipped_at, note, details, order_ref) FROM stdin;
1 1 shipped 129.9000 3 2024-03-01T10:00:00.000000 2024-03-02T16:30:00.123456 \N {"gift": false} 0b7a4c2e-3f1d-4e8a-9c55-1a2b3c4d5e6f
2 2 paid 54.0000 1 2024-03-02T11:15:00.000000 \N Gift wrap 🎁 {"gift": true, "wrap": "red"} 1c8b5d3f-4a2e-4f9b-8d66-2b3c4d5e6f70
3 1 cancelled 12.5000 1 2024-03-03T09:45:00.000000 \N Customer changed their mind \N 2d9c6e4a-5b3f-4a0c-9e77-3c4d5e6f7081
4 4 shipped 980.0000 12 2024-03-05T02:10:00.000000 2024-03-07T08:00:00.000000 请小心轻放 {"fragile": true} 3e0d7f5b-6c4a-4b1d-8f88-4d5e6f708192
5 5 pending 45.7500 2 2024-03-08T17:20:00.000000 \N Leave at the door; ring twice \N 4f1e806c-7d5b-4c2e-9a99-5e6f708192a3
6 6 shipped 310.4000 5 2024-03-10T13:00:00.000000 2024-03-11T09:00:00.000000 Fragile: "glass" {"fragile": true} 50f2917d-8e6c-4d3f-8baa-6f708192a3b4
7 8 paid 76.2000 2 2024-03-11T18:45:00.000000 \N \N \N 6103a28e-9f7d-4e40-9cbb-708192a3b4c5
8 2 shipped 19.9900 1 2024-03-12T08:00:00.000000 9999-12-31T23:59:59.999999 Shipped date set to the maximum by an old import \N 7214b39f-a08e-4f51-8dcc-8192a3b4c5d6
9 3 shipped 64.0000 2 2024-03-14T15:30:00.000000 2024-03-15T10:00:00.000000 Two parcels {"parcels": [1, 2]} 8325c4a0-b19f-4062-9edd-92a3b4c5d6e7
10 7 paid 1499.0000 1 2024-03-15T21:05:00.000000 \N C:\\Users\\ravi\\invoice.pdf \N 9436d5b1-c2a0-4173-8fee-a3b4c5d6e7f8
\.
-- Keys, indexes and constraints, after the rows so each builds once.
CREATE UNIQUE INDEX orders_pkey ON orders (id);
CREATE INDEX orders_idx_orders_customer ON orders (customer_id);
CREATE INDEX orders_idx_orders_status_date ON orders (status, ordered_at);
CREATE UNIQUE INDEX customers_pkey ON customers (id);
CREATE UNIQUE INDEX customers_email ON customers (email);
ALTER TABLE orders ADD CONSTRAINT orders_pkey PRIMARY KEY USING INDEX orders_pkey;
ALTER TABLE customers ADD CONSTRAINT customers_pkey PRIMARY KEY USING INDEX customers_pkey;
ALTER TABLE customers ADD CONSTRAINT customers_email UNIQUE USING INDEX customers_email;
ALTER TABLE orders ADD CONSTRAINT orders_fkey FOREIGN KEY (customer_id) REFERENCES customers (id) NOT VALID;
DO $f$ BEGIN
ALTER TABLE orders VALIDATE CONSTRAINT orders_fkey;
EXCEPTION WHEN foreign_key_violation THEN
RAISE WARNING 'foreign key % has rows without a parent: it stays NOT VALID, and new rows are checked', 'orders_fkey';
END $f$;
SELECT setval(pg_get_serial_sequence('orders', 'id'), LEAST(GREATEST(COALESCE((SELECT max(id) FROM orders)::numeric, 0) + 1, 1), 2147483647)::bigint, false);
SELECT setval(pg_get_serial_sequence('customers', 'id'), LEAST(GREATEST(COALESCE((SELECT max(id) FROM customers)::numeric, 0) + 1, 1), 2147483647)::bigint, false);
COMMENT ON TABLE customers IS 'People who bought at least once';
修正
- orders の "items" は符号なしのため、負でないことを確かめるチェック制約付きの smallint にしました。
- orders の "shipped_at" は datetime2(7) で、PostgreSQL が保てるより多くの秒の桁を持つため、timestamp(6) にして末尾の桁を切り捨てます。
- customers の "row_version" は SQL Server が自動で設定する行バージョンです。ダンプにはその値がないため、bytea にして空のままにします。
確認が必要
- ソースでは 6 個のテキスト列が大文字と小文字を区別せずに比較します。PostgreSQL は厳密に比較するため、一意キーや検索の動作が変わる場合があります。 必要な列には、大文字と小文字を区別しない照合順序か列の型を使ってください。
- 2 件のビュー、トリガー、ルーチン、イベントは変換されません。レポートにそれぞれ記載しています。 PostgreSQL で手動で作り直してください。
- orders のチェック制約 check1 は PostgreSQL 用に書き換えられないため (function isjson)、作成しません。 必要であれば、手動でチェック制約を書いてください。
- orders のインデックス idx_orders_pending は PostgreSQL 用に書き換えられない式を使っているため (filtered index)、作成しません。 クエリに必要なら、手動でインデックスを作成してください。
ファイルはこのコンピューター上で変換され、アップロードされることはありません。
その他のサンプル:
SQL Server から PostgreSQL で変わること
各行はコンバーターが適用するルールです。ルールによってデータが変わったときにレポートに書かれる行も示します。
bit
boolean
bit は 1 と 0 を保持し、それが PostgreSQL の true と false になります。
tinyint
負にならないことを確かめる CHECK 付きの smallint
SQL Server の tinyint は 0 から 255 までです。PostgreSQL の最小の整数型は符号付きなので、チェック制約で範囲を保ちます。
レポートの行: unsigned_widened
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text
varchar(n) と text
PostgreSQL の text はすべての文字を保持できるため、varchar と nvarchar は同じ型になります。
decimal(p,s), money, smallmoney
numeric(p,s)、money は numeric(19,4)
すべての桁を保ち、money は小数 4 桁のままです。
datetime, datetime2, smalldatetime
timestamp(p)
datetime は、タイムゾーンなしの timestamp と同じく時計が示す時刻です。
datetime2(7), time(7) and datetimeoffset(7)
秒の小数は 6 桁、7 桁目は切り捨て
PostgreSQL はマイクロ秒まで保持します。7 桁目 (100 ナノ秒) は丸めずに切り捨てるため、値が次の秒や日に繰り上がることはありません。
レポートの行: fraction_cut
datetimeoffset
timestamptz、同じ時点
timestamptz は時点を保ちます。PostgreSQL は各値が持っていたオフセットではなく、セッションのタイムゾーンで表示します。
time
time(p)
同じ時刻です。
json (SQL Server 2025)
jsonb
JSON の値は同じです。
uniqueidentifier
uuid
同じ識別子を小文字で書き出します。
binary, varbinary, image
bytea
バイトはバイトのままです。
geometry, geography
SQL Server 独自のバイト列を持つ bytea
SSMS は空間値を SQL Server のシリアル化形式で書き出し、それをバイト単位でそのまま保ちます。
レポートの行: spatial_as_native
rowversion, timestamp
bytea、空
行バージョンは SQL Server が自動で設定するもので、SSMS はその値をスクリプトに含めません。
レポートの行: rowversion_empty
sql_variant, hierarchyid, vector
text
PostgreSQL には同等の型がありません。sql_variant は各値のテキストを、hierarchyid は /1/2/ のようなパスを保ちます。xml は xml のままです。
レポートの行: type_replaced
collations that ignore case (_CI_)
厳密な比較
PostgreSQL はテキストを厳密に比較するため、SQL Server で大文字と小文字を区別しなかった列でも、Ana と ana を区別するようになります。
レポートの行: case_insensitive_collation
IDENTITY
GENERATED BY DEFAULT AS IDENTITY、最大の ID の後から継続
コピーした ID はそのまま読み込み、カウンターは最大の ID の後から続きます。
CREATE SEQUENCE
同じオプションの CREATE SEQUENCE
PostgreSQL のシーケンスも同じように動作します。SSMS はシーケンスの現在位置をスクリプトに含めないため、作成時の値から始まります。
computed columns
生成列、STORED
PostgreSQL 13 から 17 は格納型の生成列しか扱えません。式は同じで、SQL Server と同じく NULL を空として扱うように CONCAT を書き出します。
レポートの行: virtual_as_stored
computed columns with functions PostgreSQL lacks
普通の列
PostgreSQL 用に書き換えられない式は、普通の列とレポートの 1 行になります。SSMS は計算列の値をスクリプトに含めません。
レポートの行: generated_not_translated
defaults with functions PostgreSQL lacks, and NEXT VALUE FOR
デフォルト値なし
PostgreSQL 用に書き換えられないデフォルト値は省き、レポートに記載します。
レポートの行: default_not_translated
CHECK constraints
変換済み
チェック制約は同じで、各行の読み込み時に検証します。
CHECK constraints with functions PostgreSQL lacks
作成しない
PostgreSQL 用に書き換えられないチェック制約は省き、レポートに記載します。
レポートの行: check_skipped
CHECK constraints added WITH NOCHECK or disabled
作成しない
SQL Server はこれらのチェックを適用していないため、行が違反している可能性があります。
レポートの行: check_not_enforced
filtered and columnstore indexes
作成しない
IntoSQL が書き出すのは列に対する b-tree インデックスです。その他は読み込み後に作り直してください。
レポートの行: index_skipped
foreign keys
外部キー、行の後に作成
行は任意の順序で読み込み、その後でキーが検証します。
foreign keys to tables the dump doesn't create
作成しない
キーは存在しないテーブルを参照できません。
レポートの行: foreign_key_skipped
tables on a partition scheme
すべてのパーティションの行を持つ 1 つのテーブル
行は同じです。必要なら PostgreSQL でもう一度テーブルをパーティション分割してください。
レポートの行: partitions_dropped
temporal tables (SYSTEM_VERSIONING)
2 つのテーブル: 現在の行と履歴
テーブルとその履歴テーブルは普通のテーブルとしてコピーします。PostgreSQL は履歴を自動では保持しません。
レポートの行: system_versioning_dropped
NOT NULL columns with values that become NULL
NOT NULL を削除
値を NULL にする必要があった列は、NOT NULL を保てません。保つと読み込みが止まります。
レポートの行: not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functions
レポートに記載
コードが T-SQL で書かれているため、作り直せるよう一覧にします。
レポートの行: not_converted_objects
scripts without CREATE TABLE (data only)
値から読み取った型
データのみのスクリプトには行しかないため、型は値から決まります。
レポートの行: no_schema
expressions in INSERT values
NULL
データベースを実行しないコンバーターでは、これらを評価できません。
レポートの行: expression_value
types IntoSQL doesn't know
text
テキストはどんな値も保持できます。読み込み後に型を変更してください。
レポートの行: unknown_type
dates that aren't valid
NULL
日付ではない値は NULL になり、レポートで件数を示します。
レポートの行: date_out_of_range
NUL characters in text
削除
PostgreSQL の text は NUL 文字を保持できません。NUL 文字は削除し、レポートで該当する値の件数を示します。
レポートの行: nul_removed
text that isn't valid in its encoding
不正なバイトを置換文字に
PostgreSQL のテキストは有効な UTF-8 である必要があります。
レポートの行: invalid_utf8_replaced
text decoded twice (ñ)
そのままコピー
スクリプトにはまさにこの文字が含まれているため、そのままコピーし、レポートで指摘します。
レポートの行: mojibake_suspected
| SQL Server では | PostgreSQL では | レポートの行 |
|---|---|---|
| bit | booleanbit は 1 と 0 を保持し、それが PostgreSQL の true と false になります。 | |
| tinyint | 負にならないことを確かめる CHECK 付きの smallintSQL Server の tinyint は 0 から 255 までです。PostgreSQL の最小の整数型は符号付きなので、チェック制約で範囲を保ちます。 | unsigned_widened |
| char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text | varchar(n) と textPostgreSQL の text はすべての文字を保持できるため、varchar と nvarchar は同じ型になります。 | |
| decimal(p,s), money, smallmoney | numeric(p,s)、money は numeric(19,4)すべての桁を保ち、money は小数 4 桁のままです。 | |
| datetime, datetime2, smalldatetime | timestamp(p)datetime は、タイムゾーンなしの timestamp と同じく時計が示す時刻です。 | |
| datetime2(7), time(7) and datetimeoffset(7) | 秒の小数は 6 桁、7 桁目は切り捨てPostgreSQL はマイクロ秒まで保持します。7 桁目 (100 ナノ秒) は丸めずに切り捨てるため、値が次の秒や日に繰り上がることはありません。 | fraction_cut |
| datetimeoffset | timestamptz、同じ時点timestamptz は時点を保ちます。PostgreSQL は各値が持っていたオフセットではなく、セッションのタイムゾーンで表示します。 | |
| time | time(p)同じ時刻です。 | |
| json (SQL Server 2025) | jsonbJSON の値は同じです。 | |
| uniqueidentifier | uuid同じ識別子を小文字で書き出します。 | |
| binary, varbinary, image | byteaバイトはバイトのままです。 | |
| geometry, geography | SQL Server 独自のバイト列を持つ byteaSSMS は空間値を SQL Server のシリアル化形式で書き出し、それをバイト単位でそのまま保ちます。 | spatial_as_native |
| rowversion, timestamp | bytea、空行バージョンは SQL Server が自動で設定するもので、SSMS はその値をスクリプトに含めません。 | rowversion_empty |
| sql_variant, hierarchyid, vector | textPostgreSQL には同等の型がありません。sql_variant は各値のテキストを、hierarchyid は /1/2/ のようなパスを保ちます。xml は xml のままです。 | type_replaced |
| collations that ignore case (_CI_) | 厳密な比較PostgreSQL はテキストを厳密に比較するため、SQL Server で大文字と小文字を区別しなかった列でも、Ana と ana を区別するようになります。 | case_insensitive_collation |
| IDENTITY | GENERATED BY DEFAULT AS IDENTITY、最大の ID の後から継続コピーした ID はそのまま読み込み、カウンターは最大の ID の後から続きます。 | |
| CREATE SEQUENCE | 同じオプションの CREATE SEQUENCEPostgreSQL のシーケンスも同じように動作します。SSMS はシーケンスの現在位置をスクリプトに含めないため、作成時の値から始まります。 | |
| computed columns | 生成列、STOREDPostgreSQL 13 から 17 は格納型の生成列しか扱えません。式は同じで、SQL Server と同じく NULL を空として扱うように CONCAT を書き出します。 | virtual_as_stored |
| computed columns with functions PostgreSQL lacks | 普通の列PostgreSQL 用に書き換えられない式は、普通の列とレポートの 1 行になります。SSMS は計算列の値をスクリプトに含めません。 | generated_not_translated |
| defaults with functions PostgreSQL lacks, and NEXT VALUE FOR | デフォルト値なしPostgreSQL 用に書き換えられないデフォルト値は省き、レポートに記載します。 | default_not_translated |
| CHECK constraints | 変換済みチェック制約は同じで、各行の読み込み時に検証します。 | |
| CHECK constraints with functions PostgreSQL lacks | 作成しないPostgreSQL 用に書き換えられないチェック制約は省き、レポートに記載します。 | check_skipped |
| CHECK constraints added WITH NOCHECK or disabled | 作成しないSQL Server はこれらのチェックを適用していないため、行が違反している可能性があります。 | check_not_enforced |
| filtered and columnstore indexes | 作成しないIntoSQL が書き出すのは列に対する b-tree インデックスです。その他は読み込み後に作り直してください。 | index_skipped |
| foreign keys | 外部キー、行の後に作成行は任意の順序で読み込み、その後でキーが検証します。 | |
| foreign keys to tables the dump doesn't create | 作成しないキーは存在しないテーブルを参照できません。 | foreign_key_skipped |
| tables on a partition scheme | すべてのパーティションの行を持つ 1 つのテーブル行は同じです。必要なら PostgreSQL でもう一度テーブルをパーティション分割してください。 | partitions_dropped |
| temporal tables (SYSTEM_VERSIONING) | 2 つのテーブル: 現在の行と履歴テーブルとその履歴テーブルは普通のテーブルとしてコピーします。PostgreSQL は履歴を自動では保持しません。 | system_versioning_dropped |
| NOT NULL columns with values that become NULL | NOT NULL を削除値を NULL にする必要があった列は、NOT NULL を保てません。保つと読み込みが止まります。 | not_null_relaxed |
| views, functions, procedures, triggers, synonyms, types and partition functions | レポートに記載コードが T-SQL で書かれているため、作り直せるよう一覧にします。 | not_converted_objects |
| scripts without CREATE TABLE (data only) | 値から読み取った型データのみのスクリプトには行しかないため、型は値から決まります。 | no_schema |
| expressions in INSERT values | NULLデータベースを実行しないコンバーターでは、これらを評価できません。 | expression_value |
| types IntoSQL doesn't know | textテキストはどんな値も保持できます。読み込み後に型を変更してください。 | unknown_type |
| dates that aren't valid | NULL日付ではない値は NULL になり、レポートで件数を示します。 | date_out_of_range |
| NUL characters in text | 削除PostgreSQL の text は NUL 文字を保持できません。NUL 文字は削除し、レポートで該当する値の件数を示します。 | nul_removed |
| text that isn't valid in its encoding | 不正なバイトを置換文字にPostgreSQL のテキストは有効な UTF-8 である必要があります。 | invalid_utf8_replaced |
| text decoded twice (ñ) | そのままコピースクリプトにはまさにこの文字が含まれているため、そのままコピーし、レポートで指摘します。 | mojibake_suspected |
スクリプトを PostgreSQL に読み込む
スクリプトはテーブルを作成して行をコピーしてから、キー、インデックス、外部キーを追加します。そのため読み込みが速く、最初のエラーで止まります。
psql -v ON_ERROR_STOP=1 -d mydb -f sql_server.postgresql.sql外部キーは NOT VALID で追加してから検証します。存在しない行を参照している行があれば、途中で失敗する代わりに、どの制約かをスクリプトが示します。
大きなダンプでは、先にデータベースを作成し、サーバーと同じマシンから psql でスクリプトを実行してください。
IntoSQL Pro なら、デスクトップアプリやコマンドラインからファイルを PostgreSQL に直接読み込めます。スクリプトを書き出す必要はありません。
SQL Server を最適な方法でダンプする
コンバーターはダンプの内容を読み取ります。次のオプションを使うと、より多くのデータがダンプに残ります。
- SSMS でデータベースを右クリックし、[タスク]、[スクリプトの生成] を選んでテーブルを選択します。dbatools、mssql-scripter など同じライブラリを使うツールも同じスクリプトを書き出します。
- [詳細設定] で [スクリプトを作成するデータの種類] を [スキーマとデータ] にします。スキーマだけのスクリプトでは、テーブルに行がありません。
- SSMS のデフォルトである Unicode、または UTF-8 で保存します。どちらも同じように読み込め、gzip も使えます。
変換されないもの
ビュー、関数、プロシージャ、トリガー、シノニム、ルール、セキュリティポリシーは T-SQL で書かれています。黙って削除することはなく、レポートに名前で一覧するので、PostgreSQL 向けに書き直せます。
SQL Server から PostgreSQL への変換に関する質問
ここに答えがない場合は、お問い合わせページからご連絡ください。担当者が返信します。 お問い合わせページ
ダンプはアップロードされますか?
いいえ。コンバーターはブラウザ上で動作し、ダンプをディスクから少しずつ読み込むため、ダンプがコンピューターの外に出ることはありません。デスクトップアプリとコマンドラインも、お使いのコンピューター上で変換します。
ダンプはどのくらいの大きさまで扱えますか?
コンバーターはダンプ全体をメモリに保持しません。ファイルを範囲ごとに 2 回読み、読みながらスクリプトを書き出します。数 GB のダンプも、ブラウザ、デスクトップアプリ、コマンドラインで変換できます。
SSMS が保存する UTF-16 のファイルを読めますか?
はい。SSMS はデフォルトでスクリプトを UTF-16 で保存しますが、コンバーターは UTF-16 も UTF-8 も、gzip の有無にかかわらず、バッチ間の GO を含めて同じように読み込みます。
どの SQL Server バージョンのスクリプトに対応していますか?
SQL Server 2017 以降から SSMS、dbatools、mssql-scripter で書き出したスクリプトです。すべてのテスト用スクリプトは SQL Server 2017、2022、2025 で作成し、ソースとセル単位で比較しています。
IDENTITY の値は保持されますか?
はい。IDENTITY 列は identity 列になり、すべての行が ID を保ち、次の ID は最大の ID の後から続きます。シーケンスは同じオプションで作成します。
money、datetimeoffset など SQL Server の型はどうなりますか?
bit は boolean、money は numeric(19,4)、uniqueidentifier は uuid、xml は xml、datetimeoffset は timestamptz になります。datetime2 は秒の小数を 6 桁保ち、7 桁目は切り捨てます。大文字と小文字を区別しなかった列は厳密に比較するようになり、対象の列はレポートに記載されます。
プロシージャ、トリガー、ビューはどうなりますか?
データベースごとに独自の言語で書かれるため、変換はせず、レポートに名前で一覧します。
スクリプトはどの PostgreSQL バージョンで読み込めますか?
PostgreSQL 13 から 18 です。同じスクリプトをそれぞれで読み込み、問題があれば最初のエラーで止まります。