MacのPostgres.appはDB名をダブルクリックで対話モード開始

Postgres.appをインストールして起動したあと、DB名をダブルクリックすると対話モード($ psql postgresの実行)に入れる。

ドキュメント見ても載ってなくて最初わからなかった。

■備考
1.Rubyでの設定方法もあったが、特に何もしなくてもPostgres.app動いてる。
Configuring Ruby for Postgres.app
 2.ただし、bundle installすると「checking for pg_config… no」と怒られるので以下Qiitaの記事で書かれた対応が必要。Gemfileに書いて開発してるかと思うので、「Gemfileに書いている時には環境変数CONFIGURE_ARGSを設定する」と書かれてる対応を実施する。
Postgres.appを使ってPostgreSQLを使う場合に、gem ‘pg’を入れる方法

Rails5でSQLiteからPostgreSQLに変更した時のメモ

■PostgreSQL側でCREATEDB権限がない時のエラー
———————————————————————
$ rails db:setup
PG::InsufficientPrivilege: ERROR:  permission denied to create database
———————————————————————
config/database.ymlで設定書いたユーザーにCREATEDB権限があるかどうか、PostgreSQL側で確認する。

■CarrierWaveで複数画像を投稿するとエラー
1.SQLiteとPostgreSQL/MySQLで実装方法が異なる。PostgreSQLの実装にする。
(参考)CarrierWave –  Multiple file uploads
(参考)CarrierWave 複数の画像をコード三行で一つのカラムに保存する ※PostgreSQL/MySQLの実装方法でSQLiteではない

2.複数画像を投稿時に以下エラーが出る場合は構文を書き間違えている可能性あり。
———————————————————————
TypeError in UsersController#create

no implicit conversion of nil into String
———————————————————————
(参考)Stack Overflow – “no implicit conversion of nil into String” error for carrierwave multiple image upload
「mount_uploaders」ではなく「mount_uploader」と書く。

———————————————————————
# app/models/users.rb
class User < ApplicationRecord
  # 画像1つのみアップロードする場合。imageカラムに格納指定。
  mount_uploader :image, ImageUploader
  # 複数画像アップロードする場合。image_anotherカラムに格納指定。
  mount_uploaders :image_another, ImageUploader
end
———————————————————————

PostgreSQLコマンドメモ

■PostgreSQLの対話的ターミナルの入り方
————————————————————————-
$ psql postgres
postgres=#
————————————————————————-

■DB名を指定してフル権限を付与する – GRANT
DB名「db_development」にユーザー「user_development」をフル権限(ALL PRIVILEGES)で付与する。
————————————————————————-
postgres=# GRANT ALL PRIVILEGES ON DATABASE db_development TO user_development;
GRANT
postgres=# l
————————————————————————-
補足:最後に「;」をつける
補足:DB名を指定する場合は「ON DATABSE」をつける。これがないとテーブル名指定になる

■DB作成権限を付与する – ALTER ROLE
ユーザー「user_development」に「CREATEDB」権限を付与する。
————————————————————————-
postgres=# ALTER ROLE user_development WITH CREATEDB;
ALTER ROLE
postgres=# du
————————————————————————-
https://www.postgresql.jp/document/8.1/html/sql-alterrole.html

■RailsでPostgreSQL使う場合に最初にやること
PostgreSQLの管理系コマンドまとめ

■参考情報
PostgreSQL 9.1.5文書 – GRANT
PostgreSQL 8.1.9文書 – ALTER ROLE

MacでPostgreSQLをバックグラウンド起動

 バックグラウンド起動すると怒られる。(スーパーユーザーであることが前提)
——————————————————————————–
bash-3.2$ su [スーパーユーザー]
bash-3.2$ pg_ctl start -D /usr/local/var/postgres -l logfile
server starting
bash-3.2$ /bin/sh: logfile: Permission denied
——————————————————————————–

logをパス指定しろと書いてあったのを見たので指定するとディレクトリだからと怒られる。
——————————————————————————–
bash-3.2$ pg_ctl start -D /usr/local/var/postgres -l /usr/local/var/log/
server starting
bash-3.2$ /bin/sh: /usr/local/var/log/: Is a directory
——————————————————————————–

logファイルっぽいものを作成して再度起動したら動いた。
——————————————————————————–
bash-3.2$ touch /usr/local/var/log/postgres.log

bash-3.2$ pg_ctl start -D /usr/local/var/postgres -l /usr/local/var/log/postgres.log
server starting
——————————————————————————–
※これで合ってるのかわかりません

念のため、プロセスとログが吐かれているか確認。一応OKっぽい。
——————————————————————————–
bash-3.2$ ps
PID TTY           TIME CMD
54744 ttys004    0:00.08 bash
55132 ttys004    0:00.05 /usr/local/Cellar/postgresql/9.6.5/bin/postgres -D /usr/local/var/postgres

bash-3.2$ cat /usr/local/var/log/postgres.log
LOG:  database system was shut down at 2017-10-07 14:40:22 JST
LOG:  MultiXact member wraparound protections are now enabled
LOG:  autovacuum launcher started
LOG:  database system is ready to accept connections
——————————————————————————–