Konversi PostgreSQL ke SQLite
Letakkan dump plain dari pg_dump atau pg_dumpall, sebagai .sql atau .sql.gz, lalu unduh skrip SQLite dengan tabel, kunci, indeks, dan data yang sama. Setiap nilai yang tidak bisa disimpan SQLite apa adanya, dan setiap objek yang tidak didukungnya, dicantumkan di laporan.
18 baris dikonversi, 3 perbaikan, tidak ada yang ditolak
Tabel di shop_2024_postgres.sqlDump PostgreSQL 18.6 · ditulis oleh pg_dump · utf8mb4
customers8 baris2
8 kolom id INTEGER not null name TEXT not null email TEXT not null country VARCHAR(2) not null is_active INTEGER not null tags TEXT not null signed_up DATE created_at TIMESTAMP not null orders10 baris1
10 kolom id INTEGER not null customer_id INTEGER not null status TEXT not null total DECIMAL(10,2) not null items INTEGER not null ordered_at DATETIME not null shipped_at DATETIME note TEXT details TEXT delivery TEXT
Tidak dikonversi
- View paid_orders
Setiap database menulis objek ini dalam bahasanya sendiri. Tulis ulang untuk 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;
Perbaikan
- "created_at" dari customers berisi momen dengan zona waktu; SQLite tidak punya tipe yang menyimpannya, jadi momen itu disimpan dalam UTC sebagai TIMESTAMP.
- "tags" di customers adalah text[], yang tidak ada di SQLite, jadi menjadi TEXT dengan nilai yang sama.
- "delivery" di orders adalah interval, yang tidak ada di SQLite, jadi menjadi TEXT dengan nilai yang sama.
Perlu diperiksa
- 1 view, trigger, rutin, atau event tidak dikonversi; laporan mencantumkan masing-masing. Buat ulang secara manual di SQLite.
- Default "tags" di customers tidak bisa ditulis untuk SQLite (a value its type can't hold), jadi kolom itu tanpa default. Tambahkan default secara manual jika baris baru memerlukannya.
- Indeks idx_orders_details pada orders memakai ekspresi yang tidak bisa ditulis untuk SQLite (a gin index), jadi tidak dibuat. Buat indeks secara manual jika kueri memerlukannya.
- 1 nilai di "shipped_at" dari orders adalah tanggal yang tidak bisa disimpan SQLite, misalnya infinity, jadi menjadi NULL. SQLite menyimpan tahun 1 sampai 9999 tanpa infinity; ganti tanggal itu di sumber jika penting.
File Anda dikonversi di komputer ini dan tidak pernah diunggah.
Contoh lain:
Yang berubah dari PostgreSQL ke SQLite
Setiap baris adalah aturan yang diterapkan konverter, beserta baris laporan yang ditulisnya saat aturan itu mengubah sesuatu di data Anda.
boolean
INTEGER 0 atau 1 dengan CHECK
SQLite tidak punya tipe boolean; true dan false miliknya adalah 1 dan 0.
varchar(n), char(n), text
VARCHAR(n) dan TEXT, tidak diterapkan
SQLite menyimpan tipe yang dideklarasikan untuk dibaca alat, tetapi tidak membatasi panjangnya.
numeric(p,s) past 15 digits and numeric without a precision
TEXT
SQLite menyimpan sekitar 15 digit signifikan dalam angka. Angka yang lebih lebar disimpan sebagai teks agar setiap digit tetap persis.
Baris laporan: decimal_as_text
money
NUMERIC
SQLite tidak punya tipe money. Jumlahnya disimpan sebagai angka, tanpa simbol mata uang yang ditambahkan locale server.
Baris laporan: type_replaced
interval
TEXT berisi teks PostgreSQL
SQLite tidak punya tipe interval; teksnya mempertahankan setiap bagian.
Baris laporan: type_replaced
arrays (integer[], text[]...)
TEXT berisi array JSON
SQLite tidak punya array. Array JSON mempertahankan setiap elemen dan NULL, dan fungsi JSON SQLite membacanya.
Baris laporan: type_replaced
ranges, geometric types, tsvector, xml, hstore, PostGIS, composite and extension types
TEXT berisi teks PostgreSQL
SQLite tidak punya tipe yang setara, jadi setiap nilai mempertahankan teks yang ditulis PostgreSQL.
Baris laporan: type_replaced
json, jsonb
TEXT
Fungsi JSON SQLite membaca JSON dari teks.
timestamp
DATETIME sebagai teks ISO 8601
SQLite menyimpan tanggal sebagai teks yang dibaca fungsi tanggalnya.
timestamp with time zone
TIMESTAMP sebagai teks ISO 8601 dalam UTC
SQLite tidak punya tipe yang menyimpan selisih waktu, jadi setiap momen ditulis dalam UTC: momen yang sama apa pun selisih yang ditulis dump.
Baris laporan: moments_as_utc
time
TIME sebagai teks
SQLite menyimpan jam sebagai teks, termasuk 24:00:00.
infinity, -infinity and BC dates
NULL
Fungsi tanggal SQLite membaca tahun 0 sampai 9999 tanpa infinity. Nilai itu menjadi NULL dan laporan menghitungnya.
Baris laporan: date_out_of_range
NaN and Infinity in numeric, real and double precision
NULL
SQLite menyimpan NaN sebagai NULL dan infinity-nya tidak bertahan di setiap alat, jadi nilai itu menjadi NULL dan laporan menghitungnya.
Baris laporan: invalid_value_null
NOT NULL columns with values that become NULL
NOT NULL dihapus
Kolom yang nilainya harus menjadi NULL tidak bisa mempertahankan NOT NULL, atau pemuatan akan berhenti.
Baris laporan: not_null_relaxed
enum types
TEXT dengan CHECK labelnya
Teks dengan CHECK mempertahankan nilai yang sama.
enum columns holding values outside their labels
TEXT tanpa CHECK
Nilai yang tidak ada di label akan gagal di CHECK, jadi CHECK tidak dibuat.
Baris laporan: enum_check_skipped
uuid, inet, cidr, macaddr
TEXT
SQLite tidak punya tipe seperti itu; teksnya mempertahankan setiap nilai.
bytea
BLOB
Byte tetap byte.
bit(n), bit varying
INTEGER dengan nilai bit hingga 63 bit; digit TEXT jika lebih
String bit disimpan sebagai angka yang dibentuk bit-bitnya selama muat dalam bilangan bulat bertanda.
oid, xid, cid
INTEGER dengan CHECK bahwa nilainya tidak negatif
Bilangan bulat 64-bit SQLite memuat setiap nilai.
citext and nondeterministic collations
perbandingan persis
SQLite membandingkan teks secara persis kecuali diatur lain, dan NOCASE-nya hanya menyamakan huruf ASCII.
Baris laporan: case_insensitive_collation
serial, identity
INTEGER PRIMARY KEY AUTOINCREMENT, berlanjut setelah id tertinggi
SQLite menghitung primary key bilangan bulat yang utuh, dan AUTOINCREMENT mencegah id dipakai ulang, seperti sequence.
serial and identity columns that aren't the whole primary key
INTEGER tanpa penghitung
SQLite hanya menghitung kolom yang menjadi seluruh primary key, jadi kolom itu mempertahankan nilainya dan baris baru perlu nilainya sendiri.
Baris laporan: counter_dropped
sequences not owned by a column
tidak dibuat
SQLite tidak punya sequence.
Baris laporan: sequence_not_converted
generated columns
GENERATED ALWAYS AS, STORED atau VIRTUAL seperti di sumber
SQLite 3.31 dan yang lebih baru menghitung kolom generated dengan dua cara yang sama.
generated columns with functions SQLite lacks
kolom biasa berisi nilainya
Rumus yang tidak bisa ditulis untuk SQLite menyisakan kolom biasa berisi nilai dari dump dan satu baris laporan.
Baris laporan: generated_not_translated
defaults with functions SQLite lacks, and defaults from a sequence
tanpa default
Default yang tidak bisa ditulis untuk SQLite dihilangkan dan dilaporkan.
Baris laporan: default_not_translated
CHECK constraints
diterjemahkan, langsung di CREATE TABLE
SQLite hanya menerima CHECK di CREATE TABLE.
CHECK constraints with functions SQLite lacks
tidak dibuat
CHECK yang tidak bisa ditulis untuk SQLite dihilangkan dan dilaporkan.
Baris laporan: check_skipped
CHECK ... NOT VALID
tidak dibuat
PostgreSQL tidak pernah memeriksa baris yang sudah ada sebelumnya, dan SQLite akan memeriksanya saat pemuatan.
Baris laporan: check_not_valid
gin, gist, brin and hash indexes, partial and expression indexes
tidak dibuat
IntoSQL menulis indeks b-tree pada kolom untuk SQLite; buat ulang indeks lainnya setelah pemuatan.
Baris laporan: index_skipped
foreign keys
di CREATE TABLE, dimuat tanpa diperiksa, lalu dicantumkan oleh PRAGMA foreign_key_check
SQLite hanya menerima foreign key di CREATE TABLE dan hanya memeriksanya jika PRAGMA foreign_keys aktif. Baris dimuat tanpa diperiksa dan skrip diakhiri dengan daftar baris tanpa induk.
foreign keys to tables the dump doesn't create
tidak dibuat
Key tidak bisa merujuk ke tabel yang tidak ada.
Baris laporan: foreign_key_skipped
partitioned tables
satu tabel dengan baris dari setiap partisi
Barisnya sama.
Baris laporan: partitions_dropped
schemas
satu file, nama tabel diawali nama skemanya
Satu file SQLite adalah satu database, jadi nama skema membedakan tabel yang bernama sama; tabel di public mempertahankan namanya.
Baris laporan: schemas_merged
views, functions, procedures, triggers, rules, policies, extensions and types
dicantumkan di laporan
Kodenya ditulis dalam bahasa PostgreSQL, jadi dicantumkan agar Anda buat ulang.
Baris laporan: not_converted_objects
dumps without CREATE TABLE (--data-only)
tipe dibaca dari nilainya
Dump yang hanya berisi data hanya punya baris, jadi tipenya berasal dari nilainya.
Baris laporan: no_schema
expressions in INSERT values
NULL
Konverter yang tidak menjalankan database tidak bisa mengevaluasinya.
Baris laporan: expression_value
types IntoSQL doesn't know
TEXT
Teks memuat nilai apa pun; ubah tipenya setelah pemuatan.
Baris laporan: unknown_type
text that isn't valid in its encoding
byte yang rusak menjadi karakter pengganti
Teks SQLite adalah UTF-8.
Baris laporan: invalid_utf8_replaced
text decoded twice (ñ)
disalin apa adanya
Dump berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya.
Baris laporan: mojibake_suspected
| Di PostgreSQL | Di SQLite | Baris laporan |
|---|---|---|
| boolean | INTEGER 0 atau 1 dengan CHECKSQLite tidak punya tipe boolean; true dan false miliknya adalah 1 dan 0. | |
| varchar(n), char(n), text | VARCHAR(n) dan TEXT, tidak diterapkanSQLite menyimpan tipe yang dideklarasikan untuk dibaca alat, tetapi tidak membatasi panjangnya. | |
| numeric(p,s) past 15 digits and numeric without a precision | TEXTSQLite menyimpan sekitar 15 digit signifikan dalam angka. Angka yang lebih lebar disimpan sebagai teks agar setiap digit tetap persis. | decimal_as_text |
| money | NUMERICSQLite tidak punya tipe money. Jumlahnya disimpan sebagai angka, tanpa simbol mata uang yang ditambahkan locale server. | type_replaced |
| interval | TEXT berisi teks PostgreSQLSQLite tidak punya tipe interval; teksnya mempertahankan setiap bagian. | type_replaced |
| arrays (integer[], text[]...) | TEXT berisi array JSONSQLite tidak punya array. Array JSON mempertahankan setiap elemen dan NULL, dan fungsi JSON SQLite membacanya. | type_replaced |
| ranges, geometric types, tsvector, xml, hstore, PostGIS, composite and extension types | TEXT berisi teks PostgreSQLSQLite tidak punya tipe yang setara, jadi setiap nilai mempertahankan teks yang ditulis PostgreSQL. | type_replaced |
| json, jsonb | TEXTFungsi JSON SQLite membaca JSON dari teks. | |
| timestamp | DATETIME sebagai teks ISO 8601SQLite menyimpan tanggal sebagai teks yang dibaca fungsi tanggalnya. | |
| timestamp with time zone | TIMESTAMP sebagai teks ISO 8601 dalam UTCSQLite tidak punya tipe yang menyimpan selisih waktu, jadi setiap momen ditulis dalam UTC: momen yang sama apa pun selisih yang ditulis dump. | moments_as_utc |
| time | TIME sebagai teksSQLite menyimpan jam sebagai teks, termasuk 24:00:00. | |
| infinity, -infinity and BC dates | NULLFungsi tanggal SQLite membaca tahun 0 sampai 9999 tanpa infinity. Nilai itu menjadi NULL dan laporan menghitungnya. | date_out_of_range |
| NaN and Infinity in numeric, real and double precision | NULLSQLite menyimpan NaN sebagai NULL dan infinity-nya tidak bertahan di setiap alat, jadi nilai itu menjadi NULL dan laporan menghitungnya. | invalid_value_null |
| NOT NULL columns with values that become NULL | NOT NULL dihapusKolom yang nilainya harus menjadi NULL tidak bisa mempertahankan NOT NULL, atau pemuatan akan berhenti. | not_null_relaxed |
| enum types | TEXT dengan CHECK labelnyaTeks dengan CHECK mempertahankan nilai yang sama. | |
| enum columns holding values outside their labels | TEXT tanpa CHECKNilai yang tidak ada di label akan gagal di CHECK, jadi CHECK tidak dibuat. | enum_check_skipped |
| uuid, inet, cidr, macaddr | TEXTSQLite tidak punya tipe seperti itu; teksnya mempertahankan setiap nilai. | |
| bytea | BLOBByte tetap byte. | |
| bit(n), bit varying | INTEGER dengan nilai bit hingga 63 bit; digit TEXT jika lebihString bit disimpan sebagai angka yang dibentuk bit-bitnya selama muat dalam bilangan bulat bertanda. | |
| oid, xid, cid | INTEGER dengan CHECK bahwa nilainya tidak negatifBilangan bulat 64-bit SQLite memuat setiap nilai. | |
| citext and nondeterministic collations | perbandingan persisSQLite membandingkan teks secara persis kecuali diatur lain, dan NOCASE-nya hanya menyamakan huruf ASCII. | case_insensitive_collation |
| serial, identity | INTEGER PRIMARY KEY AUTOINCREMENT, berlanjut setelah id tertinggiSQLite menghitung primary key bilangan bulat yang utuh, dan AUTOINCREMENT mencegah id dipakai ulang, seperti sequence. | |
| serial and identity columns that aren't the whole primary key | INTEGER tanpa penghitungSQLite hanya menghitung kolom yang menjadi seluruh primary key, jadi kolom itu mempertahankan nilainya dan baris baru perlu nilainya sendiri. | counter_dropped |
| sequences not owned by a column | tidak dibuatSQLite tidak punya sequence. | sequence_not_converted |
| generated columns | GENERATED ALWAYS AS, STORED atau VIRTUAL seperti di sumberSQLite 3.31 dan yang lebih baru menghitung kolom generated dengan dua cara yang sama. | |
| generated columns with functions SQLite lacks | kolom biasa berisi nilainyaRumus yang tidak bisa ditulis untuk SQLite menyisakan kolom biasa berisi nilai dari dump dan satu baris laporan. | generated_not_translated |
| defaults with functions SQLite lacks, and defaults from a sequence | tanpa defaultDefault yang tidak bisa ditulis untuk SQLite dihilangkan dan dilaporkan. | default_not_translated |
| CHECK constraints | diterjemahkan, langsung di CREATE TABLESQLite hanya menerima CHECK di CREATE TABLE. | |
| CHECK constraints with functions SQLite lacks | tidak dibuatCHECK yang tidak bisa ditulis untuk SQLite dihilangkan dan dilaporkan. | check_skipped |
| CHECK ... NOT VALID | tidak dibuatPostgreSQL tidak pernah memeriksa baris yang sudah ada sebelumnya, dan SQLite akan memeriksanya saat pemuatan. | check_not_valid |
| gin, gist, brin and hash indexes, partial and expression indexes | tidak dibuatIntoSQL menulis indeks b-tree pada kolom untuk SQLite; buat ulang indeks lainnya setelah pemuatan. | index_skipped |
| foreign keys | di CREATE TABLE, dimuat tanpa diperiksa, lalu dicantumkan oleh PRAGMA foreign_key_checkSQLite hanya menerima foreign key di CREATE TABLE dan hanya memeriksanya jika PRAGMA foreign_keys aktif. Baris dimuat tanpa diperiksa dan skrip diakhiri dengan daftar baris tanpa induk. | |
| foreign keys to tables the dump doesn't create | tidak dibuatKey tidak bisa merujuk ke tabel yang tidak ada. | foreign_key_skipped |
| partitioned tables | satu tabel dengan baris dari setiap partisiBarisnya sama. | partitions_dropped |
| schemas | satu file, nama tabel diawali nama skemanyaSatu file SQLite adalah satu database, jadi nama skema membedakan tabel yang bernama sama; tabel di public mempertahankan namanya. | schemas_merged |
| views, functions, procedures, triggers, rules, policies, extensions and types | dicantumkan di laporanKodenya ditulis dalam bahasa PostgreSQL, jadi dicantumkan agar Anda buat ulang. | not_converted_objects |
| dumps without CREATE TABLE (--data-only) | tipe dibaca dari nilainyaDump yang hanya berisi data hanya punya baris, jadi tipenya berasal dari nilainya. | no_schema |
| expressions in INSERT values | NULLKonverter yang tidak menjalankan database tidak bisa mengevaluasinya. | expression_value |
| types IntoSQL doesn't know | TEXTTeks memuat nilai apa pun; ubah tipenya setelah pemuatan. | unknown_type |
| text that isn't valid in its encoding | byte yang rusak menjadi karakter penggantiTeks SQLite adalah UTF-8. | invalid_utf8_replaced |
| text decoded twice (ñ) | disalin apa adanyaDump berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya. | mojibake_suspected |
Muat skrip ke SQLite
Skrip membuat tabel, menyalin baris, lalu menambahkan kunci, indeks, dan foreign key, jadi pemuatan berjalan cepat dan berhenti di galat pertama.
sqlite3 -bail mydb.sqlite < postgresql.sqlite.sqlForeign key dideklarasikan di setiap tabel dan baris dimuat dengan pemeriksaan foreign key nonaktif. Lalu skrip mencantumkan setiap baris yang merujuk ke baris yang tidak ada, bukan gagal di tengah jalan.
Untuk dump yang besar, muat ke file baru di disk lokal. Skrip memuat semuanya dalam satu transaksi dengan sinkronisasi nonaktif, jadi berjalan secepat disk, dan pemuatan yang berhenti di tengah jalan tidak meninggalkan tabel setengah jadi.
Command line memuat file langsung ke database SQLite, tanpa menulis skrip. Gratis.
Buat dump PostgreSQL untuk hasil terbaik
Konverter membaca apa yang ada di dump. Opsi berikut membuat lebih banyak data Anda tetap ada di dalamnya:
- --format=plain, default pg_dump, menulis SQL. Arsip custom atau directory (-Fc, -Fd) menjadi SQL dengan pg_restore -f dump.sql, tanpa server database.
- --no-owner --no-privileges menghilangkan role dan grant, yang memang dilewati konverter, jadi dump lebih kecil.
- pg_dumpall menyimpan setiap database dalam satu file; tabel masing-masing diberi nama sesuai database-nya, jadi tidak ada yang bentrok.
Yang tidak dikonversi
View, materialized view, fungsi, prosedur, trigger, rule, kebijakan keamanan baris, ekstensi, dan tipe ditulis dalam bahasa PostgreSQL sendiri. Semuanya dicantumkan di laporan berdasarkan nama, tidak pernah dibuang diam-diam, sehingga Anda bisa menulis ulang untuk SQLite.
Pertanyaan tentang PostgreSQL ke SQLite
Tidak terjawab di sini? Tulis ke kami dari halaman kontak, dan seseorang akan membalas. Halaman kontak
Apakah dump saya diunggah?
Tidak. Konverter berjalan di browser Anda dan membaca dump dari disk Anda sepotong demi sepotong, jadi dump tidak pernah meninggalkan komputer Anda. Aplikasi desktop dan command line juga mengonversi di komputer Anda.
Seberapa besar dump yang bisa dipakai?
Konverter tidak pernah menyimpan seluruh dump di memori: file dibaca dua kali, per rentang, dan skrip ditulis sambil berjalan. Dump berukuran beberapa gigabyte bisa dikonversi di browser, di aplikasi desktop, dan dengan command line.
Apakah arsip pg_dump -Fc bisa dibaca?
Tidak langsung: arsip custom adalah format biner. pg_restore -f dump.sql dump.backup mengubahnya menjadi SQL plain yang dibaca konverter, tanpa terhubung ke server. Konverter memberi tahu saat menerima arsip.
Dump dari versi PostgreSQL mana yang bisa dipakai?
Dump yang ditulis pg_dump dan pg_dumpall dari PostgreSQL 10 ke atas, dengan baris COPY atau INSERT. Setiap dump uji berasal dari PostgreSQL 13 dan 18 dan dibandingkan dengan sumbernya sel demi sel.
Apakah nilai serial dan identity dipertahankan?
Kolom serial atau identity yang menjadi seluruh primary key tabel menjadi INTEGER PRIMARY KEY AUTOINCREMENT, setiap baris mempertahankan id-nya, dan id berikutnya berlanjut setelah id tertinggi. Kolom lain mempertahankan nilainya tanpa penghitung, dan laporan menyebutkannya.
Apa yang terjadi pada array, enum, dan tipe PostgreSQL lainnya?
Array menjadi array JSON, boolean menjadi 0 dan 1, enum menjadi text dengan CHECK labelnya, dan timestamp dengan zona waktu menjadi teks UTC. Numeric yang lebar tetap persis sebagai teks. Range, tipe geometris, dan tipe komposit mempertahankan teks PostgreSQL.
Bagaimana dengan fungsi, trigger, dan view?
Semuanya dicantumkan di laporan berdasarkan nama dan tidak dikonversi, karena setiap database menulisnya dalam bahasanya sendiri.
Di versi SQLite mana skrip bisa dimuat?
SQLite 3.31 dan yang lebih baru. Setiap dump uji dimuat di 3.31 dan 3.54, dan berhenti di galat pertama jika ada yang salah.