本文へスキップ
IntoSQL ホーム

PostgreSQL を SQLite に変換

pg_dump または pg_dumpall で作成したプレーン形式のダンプ (.sql または .sql.gz) をドロップすると、同じテーブル、キー、インデックス、データを持つ SQLite スクリプトをダウンロードできます。SQLite がそのまま保持できない値と、引き継がないオブジェクトは、すべてレポートに記載されます。

ファイル
sqlshop_2024_postgres.sqlサンプルファイル、6.2 KB
データベース

18 行を変換、修正 3 件、却下なし

表示

shop_2024_postgres.sql のテーブルPostgreSQL 18.6 のダンプ · pg_dump で作成 · utf8mb4

  • customers8 行2
    8 列
    idINTEGER not null
    nameTEXT not null
    emailTEXT not null
    countryVARCHAR(2) not null
    is_activeINTEGER not null
    tagsTEXT not null
    signed_upDATE
    created_atTIMESTAMP not null
  • orders10 行1
    10 列
    idINTEGER not null
    customer_idINTEGER not null
    statusTEXT not null
    totalDECIMAL(10,2) not null
    itemsINTEGER not null
    ordered_atDATETIME not null
    shipped_atDATETIME
    noteTEXT
    detailsTEXT
    deliveryTEXT

未変換

  • ビュー paid_orders

これらはデータベースごとに独自の言語で書かれます。SQLite 用に書き直してください。

-- Written by IntoSQL from a PostgreSQL dump. Load it with: sqlite3 -bail <database> < <file>
PRAGMA foreign_keys = OFF;
PRAGMA synchronous = OFF;
BEGIN;

CREATE TABLE customers ( -- People who bought at least once
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT NOT NULL,
    country VARCHAR(2) DEFAULT 'US' NOT NULL,
    is_active INTEGER DEFAULT 1 NOT NULL,
    tags TEXT NOT NULL,
    signed_up DATE,
    created_at TIMESTAMP DEFAULT (strftime('%Y-%m-%d %H:%M:%f', 'now')) NOT NULL,
    CONSTRAINT customers_is_active_check CHECK (is_active IN (0, 1))
);

CREATE TABLE orders (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    customer_id INTEGER NOT NULL,
    status TEXT DEFAULT 'pending' NOT NULL,
    total DECIMAL(10,2) NOT NULL,
    items INTEGER DEFAULT 1 NOT NULL,
    ordered_at DATETIME NOT NULL,
    shipped_at DATETIME,
    note TEXT,
    details TEXT,
    delivery TEXT,
    CONSTRAINT orders_status_check CHECK (status IN ('pending', 'paid', 'shipped', 'cancelled')),
    CONSTRAINT orders_orders_total_check CHECK (total >= (0)),
    CONSTRAINT orders_customer_id_fkey FOREIGN KEY (customer_id) REFERENCES customers (id)
);

INSERT INTO customers (id, name, email, country, is_active, tags, signed_up, created_at) VALUES
(1,'Ana Martínez','ana@example.com','MX',1,'["vip"]','2023-01-15','2023-01-15 10:24:00'),
(2,'Zoë Müller','zoe@example.de','DE',1,'[]','2023-02-03','2023-02-03 08:11:42'),
(3,'José Peña','jose@example.es','ES',0,'["wholesale","late payer"]','2023-03-21','2023-03-21 19:05:17'),
(4,'李雷','lilei@example.cn','CN',1,'[]','2023-05-09','2023-05-09 02:40:00'),
(5,'Noah O''Brien','noah@example.ie','IE',1,'[]',NULL,'2023-06-30 14:00:00'),
(6,'Amélie Laurent','amelie@example.fr','FR',1,'["vip"]','2024-01-02','2024-01-02 09:30:00'),
(7,'Ravi Patel','ravi@example.in','IN',0,'[]','2024-02-29','2024-02-29 23:59:59'),
(8,'Sofia Rossi 🌻','sofia@example.it','IT',1,'[]','2024-04-12','2024-04-12 12:12:12');
INSERT INTO orders (id, customer_id, status, total, items, ordered_at, shipped_at, note, details, delivery) VALUES
(1,1,'shipped',129.90,3,'2024-03-01 10:00:00','2024-03-02 16:30:00',NULL,'{"gift": false}','1 day 06:30:00'),
(2,2,'paid',54.00,1,'2024-03-02 11:15:00',NULL,'Gift wrap 🎁','{"gift": true, "wrap": "red"}',NULL),
(3,1,'cancelled',12.50,1,'2024-03-03 09:45:00',NULL,'Customer changed their mind',NULL,NULL),
(4,4,'shipped',980.00,12,'2024-03-05 02:10:00','2024-03-07 08:00:00','请小心轻放','{"fragile": true}','2 days 05:50:00'),
(5,5,'pending',45.75,2,'2024-03-08 17:20:00',NULL,'Leave at the door; ring twice',NULL,NULL),
(6,6,'shipped',310.40,5,'2024-03-10 13:00:00','2024-03-11 09:00:00','Fragile: "glass"','{"fragile": true}','20:00:00'),
(7,8,'paid',76.20,2,'2024-03-11 18:45:00',NULL,NULL,NULL,NULL),
(8,2,'shipped',19.99,1,'2024-03-12 08:00:00',NULL,'Shipped date set to infinity by an old import',NULL,NULL),
(9,3,'shipped',64.00,2,'2024-03-14 15:30:00','2024-03-15 10:00:00','Two parcels','{"parcels": [1, 2]}','18:30:00'),
(10,7,'paid',1499.00,1,'2024-03-15 21:05:00',NULL,'C:\Users\ravi\invoice.pdf',NULL,NULL);

-- Indexes, triggers and counters, after the rows so each index builds once.
CREATE UNIQUE INDEX customers_customers_email_key ON customers (email);
CREATE INDEX orders_idx_orders_customer ON orders (customer_id);
CREATE INDEX orders_idx_orders_status_date ON orders (status, ordered_at);
UPDATE sqlite_sequence SET seq = max(seq, 1000) WHERE name = 'customers';
INSERT INTO sqlite_sequence (name, seq) SELECT 'customers', 1000 WHERE NOT EXISTS (SELECT 1 FROM sqlite_sequence WHERE name = 'customers');
UPDATE sqlite_sequence SET seq = max(seq, 5000) WHERE name = 'orders';
INSERT INTO sqlite_sequence (name, seq) SELECT 'orders', 5000 WHERE NOT EXISTS (SELECT 1 FROM sqlite_sequence WHERE name = 'orders');
COMMIT;

-- Rows whose foreign key finds no parent, if any: the load doesn't stop for them.
PRAGMA foreign_key_check;

修正

  1. customers の "created_at" にはタイムゾーン付きの日時があります。SQLite にはタイムゾーンを保つ型がないため、TIMESTAMP として UTC で保存します。
  2. customers の "tags" は text[] ですが、SQLite にはないため、同じ値を持つ TEXT にしました。
  3. orders の "delivery" は interval ですが、SQLite にはないため、同じ値を持つ TEXT にしました。

確認が必要

  • 1 件のビュー、トリガー、ルーチン、イベントは変換されません。レポートにそれぞれ記載しています。 SQLite で手動で作り直してください。
  • customers の "tags" のデフォルト値は SQLite 用に書き換えられないため (a value its type can't hold)、列にデフォルト値はありません。 新しい行に必要なら、手動でデフォルト値を追加してください。
  • orders のインデックス idx_orders_details は SQLite 用に書き換えられない式を使っているため (a gin index)、作成しません。 クエリに必要なら、手動でインデックスを作成してください。
  • orders の "shipped_at" にある 1 個の値は infinity のように SQLite が保存できない日付のため、NULL にしました。 SQLite が保存できるのは 1 年から 9999 年までで、infinity はありません。必要ならソースでその日付を置き換えてください。

ファイルはこのコンピューター上で変換され、アップロードされることはありません。

その他のサンプル:

PostgreSQL から SQLite で変わること

各行はコンバーターが適用するルールです。ルールによってデータが変わったときにレポートに書かれる行も示します。

  • boolean

    CHECK 付きの INTEGER 0 または 1

    SQLite には boolean 型がありません。SQLite 自体の true と false も 1 と 0 です。

  • varchar(n), char(n), text

    VARCHAR(n) と TEXT、制限は適用されない

    SQLite は宣言された型をツールが読めるよう保持しますが、長さは制限しません。

  • numeric(p,s) past 15 digits and numeric without a precision

    TEXT

    SQLite の数値の有効桁数は約 15 桁です。それより大きな数はすべての桁を正確に保つためテキストにします。

    レポートの行: decimal_as_text

  • money

    NUMERIC

    SQLite には money 型がありません。金額は、サーバーのロケールが付けた通貨記号を除いて数値として保ちます。

    レポートの行: type_replaced

  • interval

    PostgreSQL のテキストを持つ TEXT

    SQLite には interval 型がありません。テキストならすべての部分を保てます。

    レポートの行: type_replaced

  • arrays (integer[], text[]...)

    JSON 配列を持つ TEXT

    SQLite には配列がありません。JSON 配列ならすべての要素と NULL を保ち、SQLite の JSON 関数で読めます。

    レポートの行: type_replaced

  • ranges, geometric types, tsvector, xml, hstore, PostGIS, composite and extension types

    PostgreSQL のテキストを持つ TEXT

    SQLite には同等の型がないため、各値は PostgreSQL が書き出したテキストを保ちます。

    レポートの行: type_replaced

  • json, jsonb

    TEXT

    SQLite の JSON 関数はテキストから JSON を読み取ります。

  • timestamp

    ISO 8601 テキストの DATETIME

    SQLite は日付関数が読めるテキストとして日付を保存します。

  • timestamp with time zone

    UTC の ISO 8601 テキストの TIMESTAMP

    SQLite にはオフセットを保つ型がないため、各日時は UTC で書き出します。ダンプのオフセットにかかわらず同じ時点です。

    レポートの行: moments_as_utc

  • time

    テキストの TIME

    SQLite は 24:00:00 を含め、時刻をテキストとして保持します。

  • infinity, -infinity and BC dates

    NULL

    SQLite の日付関数が読めるのは 0 年から 9999 年までで、infinity はありません。それらの値は NULL になり、レポートで件数を示します。

    レポートの行: date_out_of_range

  • NaN and Infinity in numeric, real and double precision

    NULL

    SQLite は NaN を NULL として保存し、infinity はツールによっては保たれないため、それらの値は NULL になり、レポートで件数を示します。

    レポートの行: invalid_value_null

  • NOT NULL columns with values that become NULL

    NOT NULL を削除

    値を NULL にする必要があった列は、NOT NULL を保てません。保つと読み込みが止まります。

    レポートの行: not_null_relaxed

  • enum types

    ラベルの CHECK 付きの TEXT

    チェック付きのテキストで同じ値を保ちます。

  • enum columns holding values outside their labels

    チェックなしの TEXT

    ラベルにない値はチェックに違反するため、チェックは作成しません。

    レポートの行: enum_check_skipped

  • uuid, inet, cidr, macaddr

    TEXT

    SQLite にはこれらの型がありません。テキストならすべての値を保てます。

  • bytea

    BLOB

    バイト列はバイト列のままです。

  • bit(n), bit varying

    63 ビットまではビットの値を持つ INTEGER、それを超えると TEXT の桁

    ビット列は、符号付き整数に収まる間は、そのビットが表す数値として保存します。

  • oid, xid, cid

    負でないことを確かめる CHECK 付きの INTEGER

    SQLite の 64 ビット整数はすべての値を保持できます。

  • citext and nondeterministic collations

    厳密な比較

    SQLite は、指定がない限りテキストを厳密に比較します。NOCASE が大文字小文字を同一視するのは ASCII 文字だけです。

    レポートの行: case_insensitive_collation

  • serial, identity

    INTEGER PRIMARY KEY AUTOINCREMENT、最大の ID の後から継続

    SQLite は整数の主キー全体を採番し、AUTOINCREMENT はシーケンスと同じく ID の再利用を防ぎます。

  • serial and identity columns that aren't the whole primary key

    カウンターなしの INTEGER

    SQLite が採番するのは主キー全体である列だけなので、列は値を保ち、新しい行には値を指定する必要があります。

    レポートの行: counter_dropped

  • sequences not owned by a column

    作成しない

    SQLite にはシーケンスがありません。

    レポートの行: sequence_not_converted

  • generated columns

    GENERATED ALWAYS AS、ソースと同じ STORED または VIRTUAL

    SQLite 3.31 以降は、生成列を同じ 2 つの方式で計算します。

  • generated columns with functions SQLite lacks

    値を持つ普通の列

    SQLite 用に書き換えられない式は、ダンプの値を持つ普通の列とレポートの 1 行になります。

    レポートの行: generated_not_translated

  • defaults with functions SQLite lacks, and defaults from a sequence

    デフォルト値なし

    SQLite 用に書き換えられないデフォルト値は含めず、レポートに記載します。

    レポートの行: default_not_translated

  • CHECK constraints

    変換して CREATE TABLE 内に記述

    SQLite はチェックを CREATE TABLE 内でしか受け付けません。

  • CHECK constraints with functions SQLite lacks

    作成しない

    SQLite 用に書き換えられないチェックは含めず、レポートに記載します。

    レポートの行: check_skipped

  • CHECK ... NOT VALID

    作成しない

    PostgreSQL は既存の行をチェックしていませんが、SQLite は読み込み中にチェックします。

    レポートの行: check_not_valid

  • gin, gist, brin and hash indexes, partial and expression indexes

    作成しない

    IntoSQL が SQLite 用に書き出すのは列に対する b-tree インデックスです。その他は読み込み後に作り直してください。

    レポートの行: index_skipped

  • foreign keys

    CREATE TABLE 内に記述し、チェックせずに読み込んでから PRAGMA foreign_key_check で一覧

    SQLite は外部キーを CREATE TABLE 内でしか受け付けず、PRAGMA foreign_keys がオンのときだけチェックします。行はチェックせずに読み込み、スクリプトの最後に親のない行を一覧にします。

  • foreign keys to tables the dump doesn't create

    作成しない

    キーは存在しないテーブルを参照できません。

    レポートの行: foreign_key_skipped

  • partitioned tables

    すべてのパーティションの行を持つ 1 つのテーブル

    行は同じです。

    レポートの行: partitions_dropped

  • schemas

    1 つのファイル、テーブル名の先頭にスキーマ名

    SQLite のファイルは 1 つのデータベースなので、スキーマ名で同名のテーブルを区別します。public のテーブルは名前を保ちます。

    レポートの行: schemas_merged

  • views, functions, procedures, triggers, rules, policies, extensions and types

    レポートに記載

    コードが PostgreSQL の言語で書かれているため、作り直せるよう一覧にします。

    レポートの行: not_converted_objects

  • dumps without CREATE TABLE (--data-only)

    値から読み取った型

    データのみのダンプには行しかないため、型は値から決まります。

    レポートの行: no_schema

  • expressions in INSERT values

    NULL

    データベースを実行しないコンバーターでは、これらを評価できません。

    レポートの行: expression_value

  • types IntoSQL doesn't know

    TEXT

    テキストはどんな値も保持できます。読み込み後に型を変更してください。

    レポートの行: unknown_type

  • text that isn't valid in its encoding

    不正なバイトを置換文字に

    SQLite のテキストは UTF-8 です。

    レポートの行: invalid_utf8_replaced

  • text decoded twice (ñ)

    そのままコピー

    ダンプにはまさにこの文字が含まれているため、そのままコピーし、レポートで指摘します。

    レポートの行: mojibake_suspected

PostgreSQL ではSQLite ではレポートの行
booleanCHECK 付きの INTEGER 0 または 1SQLite には boolean 型がありません。SQLite 自体の true と false も 1 と 0 です。
varchar(n), char(n), textVARCHAR(n) と TEXT、制限は適用されないSQLite は宣言された型をツールが読めるよう保持しますが、長さは制限しません。
numeric(p,s) past 15 digits and numeric without a precisionTEXTSQLite の数値の有効桁数は約 15 桁です。それより大きな数はすべての桁を正確に保つためテキストにします。decimal_as_text
moneyNUMERICSQLite には money 型がありません。金額は、サーバーのロケールが付けた通貨記号を除いて数値として保ちます。type_replaced
intervalPostgreSQL のテキストを持つ TEXTSQLite には interval 型がありません。テキストならすべての部分を保てます。type_replaced
arrays (integer[], text[]...)JSON 配列を持つ TEXTSQLite には配列がありません。JSON 配列ならすべての要素と NULL を保ち、SQLite の JSON 関数で読めます。type_replaced
ranges, geometric types, tsvector, xml, hstore, PostGIS, composite and extension typesPostgreSQL のテキストを持つ TEXTSQLite には同等の型がないため、各値は PostgreSQL が書き出したテキストを保ちます。type_replaced
json, jsonbTEXTSQLite の JSON 関数はテキストから JSON を読み取ります。
timestampISO 8601 テキストの DATETIMESQLite は日付関数が読めるテキストとして日付を保存します。
timestamp with time zoneUTC の ISO 8601 テキストの TIMESTAMPSQLite にはオフセットを保つ型がないため、各日時は UTC で書き出します。ダンプのオフセットにかかわらず同じ時点です。moments_as_utc
timeテキストの TIMESQLite は 24:00:00 を含め、時刻をテキストとして保持します。
infinity, -infinity and BC datesNULLSQLite の日付関数が読めるのは 0 年から 9999 年までで、infinity はありません。それらの値は NULL になり、レポートで件数を示します。date_out_of_range
NaN and Infinity in numeric, real and double precisionNULLSQLite は NaN を NULL として保存し、infinity はツールによっては保たれないため、それらの値は NULL になり、レポートで件数を示します。invalid_value_null
NOT NULL columns with values that become NULLNOT NULL を削除値を NULL にする必要があった列は、NOT NULL を保てません。保つと読み込みが止まります。not_null_relaxed
enum typesラベルの CHECK 付きの TEXTチェック付きのテキストで同じ値を保ちます。
enum columns holding values outside their labelsチェックなしの TEXTラベルにない値はチェックに違反するため、チェックは作成しません。enum_check_skipped
uuid, inet, cidr, macaddrTEXTSQLite にはこれらの型がありません。テキストならすべての値を保てます。
byteaBLOBバイト列はバイト列のままです。
bit(n), bit varying63 ビットまではビットの値を持つ INTEGER、それを超えると TEXT の桁ビット列は、符号付き整数に収まる間は、そのビットが表す数値として保存します。
oid, xid, cid負でないことを確かめる CHECK 付きの INTEGERSQLite の 64 ビット整数はすべての値を保持できます。
citext and nondeterministic collations厳密な比較SQLite は、指定がない限りテキストを厳密に比較します。NOCASE が大文字小文字を同一視するのは ASCII 文字だけです。case_insensitive_collation
serial, identityINTEGER PRIMARY KEY AUTOINCREMENT、最大の ID の後から継続SQLite は整数の主キー全体を採番し、AUTOINCREMENT はシーケンスと同じく ID の再利用を防ぎます。
serial and identity columns that aren't the whole primary keyカウンターなしの INTEGERSQLite が採番するのは主キー全体である列だけなので、列は値を保ち、新しい行には値を指定する必要があります。counter_dropped
sequences not owned by a column作成しないSQLite にはシーケンスがありません。sequence_not_converted
generated columnsGENERATED ALWAYS AS、ソースと同じ STORED または VIRTUALSQLite 3.31 以降は、生成列を同じ 2 つの方式で計算します。
generated columns with functions SQLite lacks値を持つ普通の列SQLite 用に書き換えられない式は、ダンプの値を持つ普通の列とレポートの 1 行になります。generated_not_translated
defaults with functions SQLite lacks, and defaults from a sequenceデフォルト値なしSQLite 用に書き換えられないデフォルト値は含めず、レポートに記載します。default_not_translated
CHECK constraints変換して CREATE TABLE 内に記述SQLite はチェックを CREATE TABLE 内でしか受け付けません。
CHECK constraints with functions SQLite lacks作成しないSQLite 用に書き換えられないチェックは含めず、レポートに記載します。check_skipped
CHECK ... NOT VALID作成しないPostgreSQL は既存の行をチェックしていませんが、SQLite は読み込み中にチェックします。check_not_valid
gin, gist, brin and hash indexes, partial and expression indexes作成しないIntoSQL が SQLite 用に書き出すのは列に対する b-tree インデックスです。その他は読み込み後に作り直してください。index_skipped
foreign keysCREATE TABLE 内に記述し、チェックせずに読み込んでから PRAGMA foreign_key_check で一覧SQLite は外部キーを CREATE TABLE 内でしか受け付けず、PRAGMA foreign_keys がオンのときだけチェックします。行はチェックせずに読み込み、スクリプトの最後に親のない行を一覧にします。
foreign keys to tables the dump doesn't create作成しないキーは存在しないテーブルを参照できません。foreign_key_skipped
partitioned tablesすべてのパーティションの行を持つ 1 つのテーブル行は同じです。partitions_dropped
schemas1 つのファイル、テーブル名の先頭にスキーマ名SQLite のファイルは 1 つのデータベースなので、スキーマ名で同名のテーブルを区別します。public のテーブルは名前を保ちます。schemas_merged
views, functions, procedures, triggers, rules, policies, extensions and typesレポートに記載コードが PostgreSQL の言語で書かれているため、作り直せるよう一覧にします。not_converted_objects
dumps without CREATE TABLE (--data-only)値から読み取った型データのみのダンプには行しかないため、型は値から決まります。no_schema
expressions in INSERT valuesNULLデータベースを実行しないコンバーターでは、これらを評価できません。expression_value
types IntoSQL doesn't knowTEXTテキストはどんな値も保持できます。読み込み後に型を変更してください。unknown_type
text that isn't valid in its encoding不正なバイトを置換文字にSQLite のテキストは UTF-8 です。invalid_utf8_replaced
text decoded twice (ñ)そのままコピーダンプにはまさにこの文字が含まれているため、そのままコピーし、レポートで指摘します。mojibake_suspected

スクリプトを SQLite に読み込む

スクリプトはテーブルを作成して行をコピーしてから、キー、インデックス、外部キーを追加します。そのため読み込みが速く、最初のエラーで止まります。

sqlite3 -bail mydb.sqlite < postgresql.sqlite.sql

外部キーは各テーブル内で宣言し、行は外部キーのチェックをオフにして読み込みます。その後、途中で失敗する代わりに、存在しない行を参照している行をスクリプトが一覧にします。

大きなダンプは、ローカルディスク上の新しいファイルに読み込んでください。スクリプトは同期をオフにした 1 つのトランザクションですべてを読み込むため、ディスクの速度で動き、途中で止まっても中途半端なテーブルは残りません。

コマンドラインなら、ファイルを SQLite データベースに直接読み込めます。スクリプトを書き出す必要はなく、無料です。

PostgreSQL を最適な方法でダンプする

コンバーターはダンプの内容を読み取ります。次のオプションを使うと、より多くのデータがダンプに残ります。

  • pg_dump のデフォルトである --format=plain は SQL を書き出します。custom または directory 形式のアーカイブ (-Fc, -Fd) は、pg_restore -f dump.sql でデータベースサーバーなしに SQL にできます。
  • --no-owner --no-privileges を使うと、コンバーターがどのみちスキップするロールと権限付与が除かれ、ダンプが小さくなります。
  • pg_dumpall はすべてのデータベースを 1 つのファイルにダンプします。各テーブルにはデータベース名を付けるため、名前は衝突しません。

変換されないもの

ビュー、マテリアライズドビュー、関数、プロシージャ、トリガー、ルール、行セキュリティポリシー、拡張機能、型は PostgreSQL 独自の言語で書かれています。黙って削除することはなく、レポートに名前で一覧するので、SQLite 向けに書き直せます。

PostgreSQL から SQLite への変換に関する質問

ここに答えがない場合は、お問い合わせページからご連絡ください。担当者が返信します。 お問い合わせページ

ダンプはアップロードされますか?

いいえ。コンバーターはブラウザ上で動作し、ダンプをディスクから少しずつ読み込むため、ダンプがコンピューターの外に出ることはありません。デスクトップアプリとコマンドラインも、お使いのコンピューター上で変換します。

ダンプはどのくらいの大きさまで扱えますか?

コンバーターはダンプ全体をメモリに保持しません。ファイルを範囲ごとに 2 回読み、読みながらスクリプトを書き出します。数 GB のダンプも、ブラウザ、デスクトップアプリ、コマンドラインで変換できます。

pg_dump -Fc のアーカイブを読めますか?

直接は読めません。custom 形式のアーカイブはバイナリ形式です。pg_restore -f dump.sql dump.backup を使えば、サーバーに接続せずにコンバーターが読めるプレーンな SQL にできます。アーカイブを受け取るとコンバーターがその旨を表示します。

どの PostgreSQL バージョンのダンプに対応していますか?

PostgreSQL 10 以降の pg_dump と pg_dumpall で作成した、COPY または INSERT の行を含むダンプです。すべてのテスト用ダンプは PostgreSQL 13 と 18 で作成し、ソースとセル単位で比較しています。

serial と identity の値は保持されますか?

テーブルの主キー全体である serial または identity の列は INTEGER PRIMARY KEY AUTOINCREMENT になり、すべての行が ID を保ち、次の ID は最大の ID の後から続きます。それ以外の列はカウンターなしで値を保ち、レポートにその旨が書かれます。

配列、enum など PostgreSQL の型はどうなりますか?

配列は JSON 配列、boolean は 0 と 1、enum はラベルのチェック付きテキスト、タイムゾーン付きの timestamp は UTC のテキストになります。桁の多い numeric はテキストとして正確に保ちます。範囲型、幾何型、複合型は PostgreSQL のテキストを保ちます。

関数、トリガー、ビューはどうなりますか?

データベースごとに独自の言語で書かれるため、変換はせず、レポートに名前で一覧します。

スクリプトはどの SQLite バージョンで読み込めますか?

SQLite 3.31 以降です。すべてのテスト用ダンプを 3.31 と 3.54 で読み込み、問題があれば最初のエラーで止まります。