FuelPHP+PostgreSQLでphp oil refine migrate
したときにエラーぶっこいたので、その対処メモ。
環境
- FuelPHP 1.8.1
- PostgreSQL 11.7
起こったエラー
migrationコマンドを起動したら、こんなエラーが。
$ php oil refine migrate
Uncaught exception PDOException: 55000 -
SQLSTATE[55000]: Object not in prerequisite state: 7
ERROR: 本セッションでlastvalはまだ定義されていません
in /fuel/core/classes/database/pdo/connection.php on line 271
いろいろ調べたんだけど、よくわからない。とりあえずmigrationデーブルを作るときにダメらしい。
先にテーブルさえ作っておけばOKなようなので作る。
テーブル作成
SQLは下記の感じで。
-- CREATE TABLE
CREATE TABLE IF NOT EXISTS migration
(
id serial NOT NULL,
type varchar(25) NOT NULL,
name varchar(50) NOT NULL,
migration varchar(100) DEFAULT ''::character varying NOT NULL
);
-- ALTER TABLE
ALTER TABLE migration OWNER TO postgres;
-- GRANT
GRANT REFERENCES, INSERT, TRIGGER, UPDATE, DELETE, SELECT, TRUNCATE
ON migration TO postgres;
このあと、migrateコマンドを叩いたところ、エラーなくとおりました。
めでたしめでたし。
余談
こちらの記事(https://qiita.com/sawamur@github/items/6e61b893f571853ca453 )を参考にして、fuel/core/classes/database/pdo/connection.php
をいじったら、migrationテーブルがなくてもエラーは解消されました。
ただ、作られたテーブル構成が違ってました。id
がないんですよね。
postgres=# \d migration
列 | 型 | Null 値を許容 | デフォルト
-----------+------------------------+---------------+-----------------------
type | character varying(25) | not null |
name | character varying(50) | not null |
migration | character varying(100) | not null | ''::character varying
悩んだ結果、一番最初にmigrationテーブルさえ作れば問題ないのでそんなに手間でもないですし、手作業を許容することにしました。