LaravelでRedshiftを扱う
どうも、くずきです。Lineで「クリスマス」という単語打つたびに背景が変わってイライラしてます。
今回は、LaravelでRedshiftを扱う方法についてメモります。
使用しているライブラリは、
- Laravel 5.5
- php7.1.1 (phpenv + phpbuild)
[準備] phpenv+php-buildでPostgreSQLのライブラリをいれる
RedsfhitではPostgreSQL JDBC/ODBCに基づいて構築されているため、接続の際にはPostgreSQLの接続のように使える。
自分の環境はphpenv + php-buildでphpをすでにインストールしてしまっているため、php-buildを設定後、phpを最近インストールする。
vim ~/.phpenv/plugins/php-build/share/php-build/definitions/7.1.1
上記の設定ファイルに、
configure_option -R "--with-pdo-pgsql" configure_option -R "--with-pgsql"
を追加する。
-Rを忘れないようにいれておこう。一番ハマったところだけど、以前別の方法でphp環境に似たようなライブラリをいれてたみたく、-Rオプションをつけないせいで上書きしてくれなくてずっとインストールされなかった。。
一応自分の設定全部のせておく。
# 2つ追加 configure_option -R "--with-pdo-pgsql" configure_option -R "--with-pgsql" install_package "https://secure.php.net/distributions/php-7.1.1.tar.bz2" install_xdebug "2.5.0" enable_builtin_opcache
設定が終わったらいつも通り、
phpenv uninstall 7.1.1 phpenv install 7.1.1 phpenv rehash
とやればインストールされる。
LaravelにRedshiftに接続先情報に追加
config/database.phpのconnectionsの項目の中に、redshiftの接続先を追加。
ここらへんはLaravelでの一般的なデータベースの接続と変わらないため細かい説明は割合します。
'redshift' => [ 'driver' => 'pgsql', 'host' => env('DB_REDSHIFT_HOST', '127.0.0.1'), 'port' => env('DB_REDSHIFT_PORT', '5439'), 'database' => env('DB_REDSHIFT_DATABASE', 'forge'), 'username' => env('DB_REDSHIFT_USERNAME', 'forge'), 'password' => env('DB_REDSHIFT_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', 'schema' => 'public', 'sslmode' => 'prefer', ],
つづいて、.envにも追加
DB_REDSHIFT_HOST=xxx.ddddd.ap-northeast-1.redshift.amazonaws.com DB_REDSHIFT_PORT=5439 DB_REDSHIFT_DATABASE=redshift DB_REDSHIFT_USERNAME=redshift_user DB_REDSHIFT_PASSWORD=password
LaravelからRedshiftを利用する
Laravelではすでにデータベースのマルチ接続に対応している。以下のリンクが詳しすぎて、そこみたほうがはやい。
一応自分の使い方を載せておくと、
$users = DB::connection('redshift')->select('SELECT id, name FROM users');
のようにやることで接続している。
Eloquentに紐づけることができるため、できる人はそっちにしたほうが意識せずに使えるためそうしておこう。
まとめ
- RedshiftはPostgreSQLのドライバで繋がる
- php-buildの設定ファイルで-Rオプションを忘れずに
- Eloquentに接続先を紐付けよう
悲しいことに準備のところに一番時間を使ってしまった。。