Rails에서 PostgreSQL을 사용합니다! "FATAL: role "postgres"does not exist 해소"

소개



Rails 튜토리어 어떻게 든 마무리(이해도로서는 3할 정도이므로 끝냈다고 말할 수 있을지 어떨지는 맛있고...),
자신의 로컬 환경에서 Ruby, Rails의 환경을 구축할 때 발생한 문제에 관해서, 자신의 메모를 위해, 초학자 분들에게 비슷한 문제가 발생한 방향으로 투고합니다!

개발 환경


  • macOS Catalina 10.15.7
  • MacBook Pro (13-inch, 2020, Two Thunderbolt 3 ports)
  • 프로세서 1.4 GHz 쿼드 코어 Intel Core i5
  • 메모리 8GB
  • Ruby 2.5.7
  • Rails 5.2.3
  • PostgreSQL 13.1

  • 도입까지의 일련의 흐름에 관하여



    일련의 환경 구축까지의 흐름에 관해서는 하기 기사가 매우 참고가 된다고 생각하므로, 꼭 봐 주세요.
    이번에는 PostgreSQL의 도입부에 포커스하고 기사를 만들고 싶습니다!

    【완전판】Mac로 Rails 환경 구축하는 순서의 모두
    htps : // 코 m / 코다이 _0122 / ms / 56168 네, c28, b7b1b93b

    오류 FATAL: role "postgres" does not exist 발생



    여기에서가 본제입니다!
    대충 위 기사를 참고로 환경 구축을 마치고 rails를 기동하려고 했더니,
    $ rails s
    

    아래와 같은 오류가 발생하고 rails를 시작할 수없는 상황에 ...



    응? 원래 롤은 뭐야?
    자세한 것은 하기가 참고가 된다고 생각합니다만,

    PostgreSQL 11.5 문서
    htps //w w. 포스트g sql. jp / 도쿠 멘 t / 11 / HTML / 로페 - t 리부 터 s. HTML

    "PostgreSQL은 역할이라는 개념을 사용하여 데이터베이스에 대한 연결 승인을 관리한다"고 한다.
    즉, role postgres does not exist라는 것은 롤(데이터베이스에 액세스하는 권한 같은 것?)으로서 postgre가 없어서 해석했습니다.

    그래서 실제로 다음 명령을 사용하여 데이터베이스의 역할 상태를 확인하면 ...
    $ psql postgres
    
    psql (11.4)
    Type "help" for help.
    
    postgres=# \du         # 現在のロール確認(ちなみにバッククオート\は「option+¥」キーですよ)
    
    
    Role name   |                         Attributes                         | Member of 
    ---------------+------------------------------------------------------------+-----------
     araishuntarou | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
                   |                                                        | {}
    

    역시 Role name에 postgres가 없다! !

    그럼, 여기의 role에 postgres를 추가하면 모든 것이 해결할 수 있다고 생각해,
    명령 입력! 그리고 굉장히 확인!
    $ createuser postgres 
    
    $ psql postgres
    
    psql (11.4)
    Type "help" for help.
    
    postgres=# \du         # 現在のロール確認(ちなみにバッククオート\は「option+¥」キーですよ)
    
    
    Role name   |                         Attributes                         | Member of 
    ---------------+------------------------------------------------------------+-----------
     araishuntarou | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
     postgres      |                                                            | {}
    

    했어! role에 postgres를 추가할 수 있다. 기쁘다. 이것으로 해결이라고 생각했습니다 ....

    두 번째 관문 PG::InsufficientPrivilege: ERROR: permission denied to create database



    겨우 생각으로, rail의 기동까지 도착했습니다만,
    $ rails s
    얼마나 또 오류가 발생! ! 마음이 꺾인다.....
    PG::InsufficientPrivilege: ERROR: permission denied to create database
    음, 데이터베이스를 만들 권한이 없다는 것일까?

    말해 보면 확실히, postgres의 Attributes에 아무것도 기술되어 있지 않다.
    Role name   |                         Attributes                         | Member of 
    ---------------+------------------------------------------------------------+-----------
     araishuntarou | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
     postgres      |                                                            | {}
    

    그래서 postgres에 superuser의 권한을 주려고 아래 명령을 실시!
    superuser는 「로그인 이외에 무엇이든 할 수 있는 권한을 롤에 준다」 때문에, 위험한 경우도 있다고 한다.
    (여기 옆은 나중에 공부하자... 본래는 목적에 따른 권한만을 주는 것이 좋을지도)

    참고
    htps : // 엔 g 엔 t 란세. 코 m / 포 stg 레 sql-ro
    $ psql postgres
    
    psql (11.4)
    Type "help" for help.
    
    postgres=# DROP ROLE postgres ;                   # 一度postgresを削除(役割だけを追加する方法が不明..)
    postgres=# CREATE ROLE postgres SUPERUSER ;      # superuserの権限を持ったpostgresを作成!
    postgres=# \du                                    # 現在のロール確認
    
    
    
    Role name   |                         Attributes                         | Member of 
    ---------------+------------------------------------------------------------+--------- 
    araishuntarou | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
     postgres     | Superuser                                                  | {}
    
    

    드디어 여기 왔니?

    마지막 간문 ActiveRecord::PendingMigrationError



    datebase를 migrate하지 않는다는 의미라고 파악하고,
    $ rails db:create   #データベース自体(テーブルを保管しておく全体のシステム)を作る
    

    에서
    $ rails db:migrate    #データベースの中にテーブルを作ったり、カラムを変更したりするときに実行する
    

    실행! !

    마지막으로
    $ rails s
    

    할 수 있었어! ! ! !



    마지막으로



    치열한 문장에도 불구하고 끝까지 읽어 주셔서 대단히 감사합니다.
    나도 완전하게는 이해할 수 없는 곳이 많아, 이것인가도 공부해야 합니다만,
    조금 같은 문제로 곤란한 분들의 도움에 익숙해지면 다행입니다!

    좋은 웹페이지 즐겨찾기