Mac で mysql2 が bundle install で入らないとき

結論

Step 1.
brew install openssl

Step 2.
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/

※Step 2 の内容はシェルの設定ファイルに書いておきましょう

やったこと

  • MySQL のバージョンが mysql Ver 8.0.12 for osx10.14 on x86_64 (Homebrew) だったのがダメだと思い 5.7 に下げた
    • それでも失敗する(関係ない)
  • OpenSSL と LibreSSL を切り替えた
    • それでも失敗する
  • Xcode の再インストールやコマンドラインインストール
    • それでも失敗する
  • mysql2 のバージョンを指定する
    • それでも失敗する
  • 上記の組み合わせ
    • それでも失敗する
  • 公式 Issue を見る
    • 成功

備考

とにかくまずは公式を見ろ、読めということですね。

各種バージョン

  • macOS Mojave 10.14
  • Bundler version 1.16.5
  • ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]
  • mysql2 0.5.2

PostgreSQL を MySQL と比べた

結論

  • カラムの追加時に場所(順番)を指定することはできない*1
  • TIME型 から DATETIME型に変換することはできない*2ため、一度カラムを削除するしかない

補足

上記の内容はバージョンや環境によりおそらく異なります。

*1:確かに、順番は本質的なものではないです

*2:日付が明確でない

PostgreSQL では読み取り(リードオンリー)のロールは設定できないのか(未解決)

注意

PostgreSQL 初心者が書いてます。

やりたいこと

  • 誤ってテーブルやデータを消してしまわないように、全データベースに対して読み取り専用のロールを作りたい

いろいろやってわかったこと

  • どうやらそういうロールを一発で設定することはできないらしい
  • データベースのスキーマのテーブルごとには GRANT で設定ができる
    • ただし新しくテーブルが作られた場合は都度 GRANT を実行しなければいけないっぽい

具体的なコマンド例

  • 例えば以下のような GRANT を発行する。これは適用したい各データベース全てにプロンプトを移して行わなければいけない
foobar_database=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO i_am_readonly_role;

  • 何らかの原因*1でロールに権限が付いた場合、それを上書きするためには一度 REVOKE してから GRANT し直す必要がある*2

*1:例えばそのロールでテーブルを作成する、など

*2:微妙にハマりました……

PostgreSQL の最初の最初の設定をする(MySQL と比較しつつ)

結論だけを最初に

  • Linux のユーザ名と同じ名前のロール*1が作られてなければいけない
  • Linux のロールと同じ名前のデータベースが作られてなければいけない
  • ロールやデータベースを作成するためには postgres という特別なユーザでログインする必要がある
  • postgres ユーザでログインするためにはシェルで操作するユーザを postgres にしなければいけない
  • 上記にはもちろん例外ありです

MySQL から PostgreSQL へ

両方の RDBMS とも RDB としては大半の機能が同じですが、ユーザ*2周りなどで自分がハマったことをずらずらと書いていきます。

まず用語として押さえておかないとドキュメント類を読むときに問題となる語として「ロール」という語があります。これは「ユーザ」とほぼ同義です。これだけは押さえておきましょう。

なお、以下の説明は Ubuntu 16.04 LTS 上でのものです。

*1:いわゆるユーザのこと

*2:ロール

続きを読む
Powered by はてなブログ