Laravel Horizonのfailed_jobsテーブルを生SQL(PostgreSQL)で追加してみる


はじめに

Laravel Horizon導入時に失敗したjobを溜め込むfailed_jobsテーブルが必要ですが、migrateがLaravelとは別で機能しているため、自前でテーブル構成を定義したときの話です

環境

name ver
PHP 7.3
Laravel 6.5
PostgreSQL 10.6

Laravelでマイグレーションした場合のテーブル構造

既存でPostgreSQLを使ってHorizonを導入しているプロジェクトがあったのでテーブルをみてみるとこんな感じだった

hoge=> \d+ failed_jobs
                                                              Table "public.failed_jobs"
   Column   |              Type              | Collation | Nullable |                 Default                 | Storage  | Stats target | Description
------------+--------------------------------+-----------+----------+-----------------------------------------+----------+--------------+-------------
 id         | bigint                         |           | not null | nextval('failed_jobs_id_seq'::regclass) | plain    |              |
 connection | text                           |           | not null |                                         | extended |              |
 queue      | text                           |           | not null |                                         | extended |              |
 payload    | text                           |           | not null |                                         | extended |              |
 exception  | text                           |           | not null |                                         | extended |              |
 failed_at  | timestamp(0) without time zone |           | not null | CURRENT_TIMESTAMP                       | plain    |              |
Indexes:
    "failed_jobs_pkey" PRIMARY KEY, btree (id)

念の為新規でLaravelの環境を用意してチュートリアルどおり入れてみても同様なのでこの構成で大丈夫そう
https://readouble.com/laravel/6.x/ja/queues.html

実行したSQL

上のテーブル構造から以下のSQLを実行で問題なく作成できた

CREATE TABLE failed_jobs (
    id         BIGSERIAL PRIMARY KEY,
    connection TEXT NOT NULL,
    queue      TEXT NOT NULL,
    payload    TEXT NOT NULL,
    exception  TEXT NOT NULL,
    failed_at  TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

おわりに

artisanコマンドは便利だけど、やっぱり内部実装を理解してから使わないと混乱するので、実験って大事