Help us understand the problem. What is going on with this article?

FuelPHP+PostgreSQLのmigrationでエラー(Uncaught exception PDOException: 55000 - SQLSTATE[55000]: Object not in prerequisite state:)

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テーブルさえ作れば問題ないのでそんなに手間でもないですし、手作業を許容することにしました。

ritya
主にサーバーサイドの開発者。 PHP9年→Ruby(Ruby on Rails)勉強中。 AWS/Dockerに詳しくなりたい。 フルリモートワークの子育てエンジニア。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away