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に接続先を紐付けよう
悲しいことに準備のところに一番時間を使ってしまった。。