🥋
SQLite3 を PostgreSQL にできるコマンド postlite
はじめに
SQLite3 くらい楽に扱えて、PostgreSQL みたいにネットワーク経由で使える物ないかなーなんて思ったりする事ないですか?ありますよね、あるんです。
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
ツールと記事の公開ありがとうございます。
postlite + bdash の組み合わせで使うことができました。
ところで input.sql についてなのですが、もしかしたら最後に COMMIT; が必要ではないでしょうか?
ありがとうございます。