sqlite_fdw
sqlite_fdw : SQLite Foreign Data Wrapper
Overview
| ID | Extension | Package | Version | Category | License | Language |
|---|---|---|---|---|---|---|
| 8640 | sqlite_fdw | sqlite_fdw | 2.5.0 | FDW | PostgreSQL | C |
| Attribute | Has Binary | Has Library | Need Load | Has DDL | Relocatable | Trusted |
|---|---|---|---|---|---|---|
--s-d-r | No | Yes | No | Yes | yes | no |
| Relationships | |
|---|---|
| See Also | mysql_fdw file_fdw postgres_fdw wrappers multicorn odbc_fdw jdbc_fdw duckdb_fdw |
break on el8 due to sqlite-lib version low
Packages
| Type | Repo | Version | PG Major Compatibility | Package Pattern | Dependencies |
|---|---|---|---|---|---|
| EXT | PGDG | 2.5.0 | 18 17 16 15 14 | sqlite_fdw | - |
| RPM | PGDG | 2.5.0 | 18 17 16 15 14 | sqlite_fdw_$v | - |
| DEB | PGDG | 2.5.0 | 18 17 16 15 14 | postgresql-$v-sqlite-fdw | - |
| Linux / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
el8.x86_64 | MISS | PGDG 2.4.0 | PGDG 2.4.0 | PGDG 2.4.0 | PGDG 2.4.0 |
el8.aarch64 | MISS | PGDG 2.4.0 | PGDG 2.4.0 | PGDG 2.4.0 | PGDG 2.4.0 |
el9.x86_64 | MISS | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 |
el9.aarch64 | MISS | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 |
el10.x86_64 | MISS | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 |
el10.aarch64 | MISS | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 |
d12.x86_64 | MISS | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 |
d12.aarch64 | MISS | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 |
d13.x86_64 | MISS | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 |
d13.aarch64 | MISS | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 |
u22.x86_64 | MISS | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 |
u22.aarch64 | MISS | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 |
u24.x86_64 | MISS | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 |
u24.aarch64 | MISS | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 | PIGSTY 2.5.0 |
Source
pig build pkg sqlite_fdw; # build rpm/debInstall
Make sure PGDG repo available:
pig repo add pgdg -u # add pgdg repo and update cacheInstall this extension with pig:
pig install sqlite_fdw; # install via package name, for the active PG version
pig install sqlite_fdw -v 17; # install for PG 17
pig install sqlite_fdw -v 16; # install for PG 16
pig install sqlite_fdw -v 15; # install for PG 15
pig install sqlite_fdw -v 14; # install for PG 14Create this extension with:
CREATE EXTENSION sqlite_fdw;Usage
Create Server
CREATE EXTENSION sqlite_fdw;
CREATE SERVER sqlite_server FOREIGN DATA WRAPPER sqlite_fdw
OPTIONS (database '/path/to/database.db');Server Options: database (required, path to SQLite file), updatable (default true), truncatable (default false), keep_connections (default true), batch_size (default 1), force_readonly (default false).
No CREATE USER MAPPING is required since SQLite has no authentication model.
Create Foreign Table
CREATE FOREIGN TABLE remote_data (
id integer OPTIONS (key 'true'),
name text,
created timestamp OPTIONS (column_type 'INT'),
data bytea
)
SERVER sqlite_server
OPTIONS (table 'data_table');Table Options: table (SQLite table name if different from PostgreSQL name), updatable, truncatable, batch_size.
Column Options: column_name (map to different SQLite column name), column_type (SQLite affinity: INT for epoch timestamps, BLOB for UUIDs), key (mark as primary key for UPDATE/DELETE).
CRUD Operations
SELECT * FROM remote_data WHERE id > 100;
INSERT INTO remote_data (id, name) VALUES (1, 'test');
UPDATE remote_data SET name = 'updated' WHERE id = 1;
DELETE FROM remote_data WHERE id = 1;Import Foreign Schema
IMPORT FOREIGN SCHEMA public
FROM SERVER sqlite_server INTO local_schema;Import Options: import_default (default false), import_not_null (default true).
Data Type Mapping
| SQLite Type | PostgreSQL Type |
|---|---|
| int | bigint |
| text, char, clob | text |
| blob | bytea |
| real, float, double | double precision |
| datetime | timestamp |
| uuid | uuid |
| json, jsonb | json, jsonb |
Timestamps can be stored as TEXT (ISO format) or INT (Unix epoch, use column_type 'INT'). UUIDs can be stored as TEXT (36 chars) or BLOB (16 bytes). The SQLite database file must be readable (and writable for DML) by the PostgreSQL OS user.