いつもの spatie 様がたの製作
はじめに
開発環境でDBのダンプを取ったり、開発メンバーに配ったりすることがありますよね
その際 mysqldump
や pg_dump
のコマンドを用意するのは多少コストがかかる...
そこで .env
に登録したDBの設定を利用して artisan
コマンドから実行しよう、というのがこのライブラリです!
mysql
でも postgres
でも同じように使えますが、
mysqldump
や pg_dump
系のコマンドを使用可能な環境である必要があります
インストール
$ composer require spatie/laravel-db-snapshots
# 細かい設定がしたければ
$ php artisan vendor:publish --provider="Spatie\DbSnapshots\DbSnapshotsServiceProvider"
基本的に .env
のプライマリDBを参照する
次に、どのディスクに書き出すかを config/filesystems.php
に記入する
とりあえずローカルに書き出すと良い
disk
配列に定義できるものであれば、なんでも使える
'disks' => [
// ...
'snapshots' => [
'driver' => 'local',
'root' => database_path('snapshots'),
],
// ...
]
使い方
# snapshot の保存
$ php artisan snapshot:create
Creating new snapshot...
Snapshot `2024-10-21_00-47-25` created (size: 543 B)
# snapshot の読み込み
$ php artisan snapshot:load
Which snapshot? [2024-10-21_00-47-25]:
[0] 2024-10-21_00-47-25
> 0
Snapshot `2024-10-21_00-47-25` loaded!
基本的にこれだけ!
上記の設定だと database/snapshots/*
に保存される
好きな場所に変更するなり、.gitignore
に追加するなり好きに使おう
応用
# 任意の名前を付ける
$ php artisan snapshot:create 20241021_v3_dump
Creating new snapshot...
Snapshot `20241021_v3_dump` created (size: 543 B)
# snapshot を消す
$ sail artisan snapshot:delete
Which snapshot? [20241021_v3_dump]:
[0] 20241021_v3_dump
[1] 2024-10-21_00-47-25
> 1
Snapshot `2024-10-21_00-47-25` deleted!
正直消す系のコマンドは、ファイル操作でやったほうが良い気がした
[PostgreSQL] Sail 環境下のエラー
Sail 環境で実行しようとしたら以下のエラーが出た
どちらかのバージョンを合わせよう
Error Output
============
pg_dump: error: aborting because of server version mismatch
pg_dump: detail: server version: 17.0 (Debian 17.0-1.pgdg120+1); pg_dump version: 15.7 (Ubuntu 15.7-1.pgdg22.04+1)
Sail コンテナを変更するのは少々コストが高いので、DB側を15に寄せる
pgsql:
- image: 'postgres:17'
+ image: 'postgres:15.7'
既存DBを消して再起動する
$ sail down --volumes
$ sail up -d
おわりに
面倒なことは artisan コマンドにやらせようの会