---
title: "Migrasi PostgreSQL ke SQLite di browser Anda"
description: "Migrasi database PostgreSQL ke SQLite: konversi file pg_dump menjadi skrip dengan tabel, kunci, dan data yang sama, plus laporan setiap perubahan."
canonical: https://intosql.com/id/postgresql-ke-sqlite
last_updated: 2026-10-15
---

# Migrasi PostgreSQL ke SQLite di browser Anda

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.

[Panduan migrasi PostgreSQL ke SQLite](https://intosql.com/docs/migrations/postgresql-to-sqlite)

[Tipe data PostgreSQL ke SQLite](https://intosql.com/docs/types/postgresql-to-sqlite)

## 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.

| Di PostgreSQL | Di SQLite | Baris laporan |
| --- | --- | --- |
| boolean | INTEGER 0 atau 1 dengan CHECK |  |
| varchar(n), char(n), text | VARCHAR(n) dan TEXT, tidak diterapkan |  |
| numeric(p,s) past 15 digits and numeric without a precision | TEXT | `decimal_as_text` |
| money | NUMERIC | `type_replaced` |
| interval | TEXT berisi teks PostgreSQL | `type_replaced` |
| arrays (integer[], text[]...) | TEXT berisi array JSON | `type_replaced` |
| ranges, geometric types, tsvector, xml, hstore, PostGIS, composite and extension types | TEXT berisi teks PostgreSQL | `type_replaced` |
| json, jsonb | TEXT |  |
| timestamp | DATETIME sebagai teks ISO 8601 |  |
| timestamp with time zone | TIMESTAMP sebagai teks ISO 8601 dalam UTC | `moments_as_utc` |
| time | TIME sebagai teks |  |
| infinity, -infinity and BC dates | NULL | `date_out_of_range` |
| NaN and Infinity in numeric, real and double precision | NULL | `invalid_value_null` |
| NOT NULL columns with values that become NULL | NOT NULL dihapus | `not_null_relaxed` |
| enum types | TEXT dengan CHECK labelnya |  |
| enum columns holding values outside their labels | TEXT tanpa CHECK | `enum_check_skipped` |
| uuid, inet, cidr, macaddr | TEXT |  |
| bytea | BLOB |  |
| bit(n), bit varying | INTEGER dengan nilai bit hingga 63 bit; digit TEXT jika lebih |  |
| oid, xid, cid | INTEGER dengan CHECK bahwa nilainya tidak negatif |  |
| citext and nondeterministic collations | perbandingan persis | `case_insensitive_collation` |
| serial, identity | INTEGER PRIMARY KEY AUTOINCREMENT, berlanjut setelah id tertinggi |  |
| serial and identity columns that aren't the whole primary key | INTEGER tanpa penghitung | `counter_dropped` |
| sequences not owned by a column | tidak dibuat | `sequence_not_converted` |
| generated columns | GENERATED ALWAYS AS, STORED atau VIRTUAL seperti di sumber |  |
| generated columns with functions SQLite lacks | kolom biasa berisi nilainya | `generated_not_translated` |
| defaults with functions SQLite lacks, and defaults from a sequence | tanpa default | `default_not_translated` |
| CHECK constraints | diterjemahkan, langsung di CREATE TABLE |  |
| CHECK constraints with functions SQLite lacks | tidak dibuat | `check_skipped` |
| CHECK ... NOT VALID | tidak dibuat | `check_not_valid` |
| gin, gist, brin and hash indexes, partial and expression indexes | tidak dibuat | `index_skipped` |
| foreign keys | di CREATE TABLE, dimuat tanpa diperiksa, lalu dicantumkan oleh PRAGMA foreign_key_check |  |
| foreign keys to tables the dump doesn't create | tidak dibuat | `foreign_key_skipped` |
| partitioned tables | satu tabel dengan baris dari setiap partisi | `partitions_dropped` |
| schemas | satu file, nama tabel diawali nama skemanya | `schemas_merged` |
| views, functions, procedures, triggers, rules, policies, extensions and types | dicantumkan di laporan | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | tipe dibaca dari nilainya | `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 | byte yang rusak menjadi karakter pengganti | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | disalin apa adanya | `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.

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

Foreign 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

### 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.

## Dari PostgreSQL

- [PostgreSQL ke PostgreSQL](https://intosql.com/id/postgresql-ke-postgresql)
- [PostgreSQL ke MySQL](https://intosql.com/id/postgresql-ke-mysql)
- [PostgreSQL ke MariaDB](https://intosql.com/id/postgresql-ke-mariadb)
- [PostgreSQL ke SQL Server](https://intosql.com/id/postgresql-ke-sql-server)
- [PostgreSQL ke Oracle](https://intosql.com/id/postgresql-ke-oracle)

## Ke SQLite

- [MySQL ke SQLite](https://intosql.com/id/mysql-ke-sqlite)
- [MariaDB ke SQLite](https://intosql.com/id/mariadb-ke-sqlite)
- [SQL Server ke SQLite](https://intosql.com/id/sql-server-ke-sqlite)
- [SQLite ke SQLite](https://intosql.com/id/sqlite-ke-sqlite)
- [Oracle ke SQLite](https://intosql.com/id/oracle-ke-sqlite)

## Panduan dan setiap pasangan

- [SQLite ke PostgreSQL](https://intosql.com/id/sqlite-ke-postgresql)
- [Panduan migrasi PostgreSQL ke SQLite](https://intosql.com/docs/migrations/postgresql-to-sqlite)
- [Tipe data PostgreSQL ke SQLite](https://intosql.com/docs/types/postgresql-to-sqlite)
- [Setiap pasangan database](https://intosql.com/id/migrasi-database)
