PlaggerLDRのバックエンドをPostgreSQLに

なんとなく PostgreSQL にしたくなった。
Schema::Pg を作る必要があるか? と思ったのだけど、SQLite のそのまんまでいける。
ただ entry.date が timestamp 型でないのが少々気持ち悪くはあるが。

$ createdb -E UTF_8 plagger
$ echo .schema | sqlite3 plagger.db | psql plagger

以下のSQLを実行。id のカラムを auto increment に。

CREATE SEQUENCE entry_id_seq;
ALTER TABLE entry ALTER id SET DEFAULT nextval('entry_id_seq');
CREATE SEQUENCE entry_meta_id_seq;
ALTER TABLE entry_meta ALTER id SET DEFAULT nextval('entry_meta_id_seq');
CREATE SEQUENCE entry_tag_id_seq;
ALTER TABLE entry_tag ALTER id SET DEFAULT nextval('entry_tag_id_seq');
CREATE SEQUENCE feed_id_seq;
ALTER TABLE feed ALTER id SET DEFAULT nextval('feed_id_seq');
CREATE SEQUENCE feed_meta_id_seq;
ALTER TABLE feed_meta ALTER id SET DEFAULT nextval('feed_meta_id_seq');
CREATE SEQUENCE feed_tag_id_seq;
ALTER TABLE feed_tag ALTER id SET DEFAULT nextval('feed_tag_id_seq');

config.yaml で接続先設定。

  - module: Store::DBIC
    config:
      schema_class: Plagger::Schema::SQLite
      connect_info: [ 'dbi:Pg:dbname=plagger', 'fujiwara', '', ]

できた。

.dump でデータの中身も全部移行できるかと思ったのだが、

  • date に INTEGER じゃない値が入っている entry があった (SQLiteは型チェックしないからエラーにならない)
  • body で ' のエスケープがらみで import 時にエラーになる entry が

ということで、スキーマだけ。