Rails postgresのコマンド、設定等

AWSでポスグレのDBを利用しないといけなくなりました。 herokuへデプロイするためです。

railsのdatabase.ymlの設定にDBを作らないといけないです。 ポスグレはインストールされているとしてその後の作業を記載します。 インストールについては、別途まとめる予定です。

まずポスグレの起動

service postgresql start

Rails デフォルトのSQLiteはファイルなので、起動しなくてよい。
しかし大規模のデータ処理には向かない。
よって毎回ポスグレを立ち上げる必要があります。
もちろんdevelopmentをSQLiteに設定する方法もあります。
しかし、一度ポスグレを利用すると
inetタイプをテーブルに保持する。そのためにSQLiteへの変更はエラーになる。
はじめからDevelopmentはSQLiteで作っておくのが望ましい。
ついでにそのあたりの設定も書きます。

config>database.yml

default: &default
  adapter: sqlite3
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

test:
  <<: *default
  database: db/test.sqlite3
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

development:
  <<: *default
  database: db/test.sqlite3
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000
  
production:
  adapter: postgresql
  encoding: utf8
  database: [app_name]_production
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  url: <%= ENV['DATABASE_URL'] %>

gemは

gem 'sqlite3', group: [:development,:test]
gem 'pg','>= 0.18', '< 2.0', group: [:production] 

デプロイ時だけポスグレを利用する設定にしておきます。
'pg'のバージョンは利用できるものに変更してくださいね。

先程の話ですが、ポスグレでDB作ってあとにSQLiteに変更すると発生する問題は、inetのことです。
inetとは
inetタイプは、IPv4またはIPv6ホストアドレス、およびオプションでそのサブネットをすべて1つのフィールドに保持します。 勝手に作らているのでどうしようもないです。
参考サイト stackoverflow.com

まずポストグレスにログインしないといけません。 ポスグレをインストールすると、デフォルトでpostgresというユーザーが作られています。 UNIXにもユーザーがいて、ポストグレスにもユーザーがいる。
このあたりが、初心者には戸惑うところではないかと思います。 ポスグレもDBなので、多くのユーザーがアクセスします。しかもリモート接続もします。 よって権限をきちんと割り振っておかないと大変なことになります。
ロリポップなどの格安サーバーで、ワードプレスインストールする際に、DBを作りますね。あれはポストグレスのようなDBが、ユーザーと権限をきちんと管理しているので、一人が何個もワードプレスインストールできたり、他のユーザーと混ざらないようになっています。DB偉いですね! 話それましたが、

$ sudo -u postgres psql

これでpostgresユーザーになっています。ついでに psqlという、ポストグレスにログインするコマンドを実行しています。

f:id:happy_teeth_ago:20180626111947p:plain

この画面ではまずpostgresユーザーになって、それからpsqlを実行しています。 それから

postgres=#この行がSQL文を実行するところ

SELECT * FROM pg_shadow;

これで全ユーザーを確認できます。最後のセミコロン忘れないように! まずポストグレスのユーザーを作成しないといけない。 ロールと言うらしいですね。

create role [user_name] with createdb password='[passwordを入れましょう]';

このロールはテーブルも作成できます。ロール作るときにも権限を付与しないといけないので、普通に作るだけだとテーブル作れないので注意が必要です。 テーブル作成して、ロールも作成したら

\q

で抜けます。 その下の階層 bash-4.2$というところで、ユーザーを確認したり、テーブルを確認したりします。 2段階になっているのでこれも初心者の戸惑うところかと、、

psql -l

で全テーブルを表示できます。 psqlコマンドですね。

bash-4.2$を抜けるときは

exit

でし。 これでよかったかな? これであっているのか分からないので何か気づいたらコメントお願いします。