🥋

SQLite3 を PostgreSQL にできるコマンド postlite

2022/04/01に公開
2

はじめに

SQLite3 くらい楽に扱えて、PostgreSQL みたいにネットワーク経由で使える物ないかなーなんて思ったりする事ないですか?ありますよね、あるんです。

postlite

https://github.com/benbjohnson/postlite

このニーズに答えてくれるのが postlite です。postlite を使うと SQLite3 で作られたデータベースファイルを、PostgreSQL の様に扱えます。

仕組みは至って簡単で、僕が開発している go-sqlite3 に PostgreSQL の通信プロトコルのガワと、仮想テーブルを使って PostgreSQL のスキーマを疑似しています。

インストール

postlite は go-sqlite3 の vtable を使います。ですので、go install ではなく postlite の README.md に書かれた手順を使わなければなりません。

go install -tags vtable ./cmd/postlite

試して見よう

まずは適当な SQLite3 データベースファイルを作ります。

input.sql
BEGIN TRANSACTION;
CREATE TABLE foo (id integer not null primary key, name text);
INSERT INTO foo VALUES(1,'foo');
INSERT INTO foo VALUES(2,'bar');
INSERT INTO foo VALUES(3,'baz'); COMMIT; 

適当な DDL を書いてデータベースファイルを作ります。

$ sqlite3 foo.db < input.sql

データベースファイルがあるディレクトリを指定して postlite を起動します。

$ postlite --data-dir ./data

あとは psql コマンドを使って接続します。

$ psql -h localhost foo.db
psql (14.0, server 13.0.0)
Type "help" for help.

foo.db=> select * from foo;
 id | name
----+------
 1  | foo
 2  | bar
 3  | baz
(3 rows)

簡単ですね。

まとめ

SQlite3 を PostgreSQL にしてしまうコマンド postlite を紹介しました。使いこんでいないのでどの程度使えるのか分かりませんが、もしちゃんと使えるならテスト等に利用できそうです。

Discussion

mganekomganeko

ツールと記事の公開ありがとうございます。
postlite + bdash の組み合わせで使うことができました。
ところで input.sql についてなのですが、もしかしたら最後に COMMIT; が必要ではないでしょうか?