Rails และ PostgreSQL: ไม่มีบทบาท postgres


106

ฉันได้ติดตั้ง PostgreSQL บน Mac OS Lion แล้วและกำลังทำงานกับแอปราง ฉันใช้ RVM เพื่อแยกทุกอย่างออกจากแอป Rails อื่น ๆ

ด้วยเหตุผลบางประการเมื่อฉันพยายามย้ายฐานข้อมูลเป็นครั้งแรกคราดไม่พบผู้ใช้ postgres ฉันได้รับข้อผิดพลาด

 FATAL:  role "postgres" does not exist

ฉันมี pgAdmin ดังนั้นฉันจึงเห็นได้ชัดว่ามีผู้ใช้ postgres ในฐานข้อมูลซึ่งเป็นบัญชีผู้ดูแลระบบดังนั้นฉันจึงไม่แน่ใจว่าจะต้องทำอะไรอีก

ฉันอ่านที่ไหนสักแห่งเกี่ยวกับผู้ที่มีปัญหากับ PostgreSQL เนื่องจากมีการติดตั้งพา ธ ไว้ แต่ฉันไม่คิดว่าจะไปได้ไกลขนาดนั้นหากไม่พบฐานข้อมูล


สำหรับปัญหาที่เกี่ยวข้องอย่างใกล้ชิดที่postgresยังไม่ได้สร้างผู้ใช้ DB (= บทบาท) ซึ่งอาจนำไปสู่ข้อความแสดงข้อผิดพลาดเดียวกันโปรดดูคำถามที่เกี่ยวข้องนี้: stackoverflow.com/questions/11919391/…
Erwin Brandstetter

คำตอบ:


12

ข้อความนี้จะปรากฏขึ้นเมื่อไม่มีผู้ใช้ฐานข้อมูล เปรียบเทียบคู่มือที่นี่
ท้องถิ่นหลายฐานข้อมูล ไม่สามารถจะอธิบาย บทบาทใช้ได้ทั้งคลัสเตอร์ อีกครั้งคู่มือ :

โปรดสังเกตว่าบทบาทถูกกำหนดไว้ที่ระดับคลัสเตอร์ฐานข้อมูลดังนั้นจึงใช้ได้กับฐานข้อมูลทั้งหมดในคลัสเตอร์

คุณต้องสิ้นสุดในอีกฐานข้อมูลคลัสเตอร์ นั่นจะเป็นเซิร์ฟเวอร์อื่นที่ทำงานบนเครื่องเดียวกันโดยฟังพอร์ตอื่น หรืออาจเป็นไปได้มากกว่าในเครื่องอื่น

เป็นไปได้ไหมที่ข้อความนั้นมาจากเซิร์ฟเวอร์ระยะไกล?


นั่นแหล่ะ - ฉันประสบปัญหาในการทำให้ postgresql เข้าสู่ช่วงเวลาทำงานดังนั้นฉันจึงทำการติดตั้งใหม่ดังนั้นฉันต้องมีอินสแตนซ์สองสามอย่างในตอนนี้ เปลี่ยนพอร์ตในไฟล์ database.yml และทุกอย่างก็ใช้ได้ดี ขอบคุณสำหรับความช่วยเหลือของคุณ!
Adam

ใช้งานไม่ได้แม้ว่าจะล้างภาพทั้งหมดdocker rmi $(docker images -q) --forceแล้วก็ตาม- แต่ปัญหาอยู่ที่volumesฉันเดา
Prayagupd

267

อันที่จริงด้วยเหตุผลที่ไม่ทราบสาเหตุฉันพบว่าปัญหานี้เป็นเพราะไม่ได้สร้างบทบาท postgresql

ลองวิ่ง:

createuser -s -r postgres

โปรดทราบว่ามีบทบาททางที่ PostgreSQL รักษาสิทธิ์ของฐานข้อมูล หากไม่มีบทบาทสำหรับผู้ใช้ postgres ก็จะไม่สามารถเข้าถึงอะไรได้ คำสั่ง createuser เป็นกระดาษห่อหุ้มรอบ ๆ คำสั่ง CREATE USER, CREATE ROLE เป็นต้น


8
ฉันต้องใช้sudo su - postgresก่อนที่คำสั่งนี้จะได้ผลสำหรับฉัน ขอบคุณ!
Connor Leech

2
ไม่รู้ว่าการตั้งค่าของฉันเกิดขึ้นได้อย่างไร แต่ฉันสร้าง postgresql โดยไม่มีผู้ใช้และบทบาทของ postgres myUser เป็นผู้ใช้เพียงคนเดียว แต่ปฏิเสธที่จะให้ฉันเข้าโดยอ้างว่าฐานข้อมูลชื่อ myUser ไม่อยู่! ส่วนหนึ่งของการทำร้ายร่างกายที่ยังไม่เปิดเผยนี้!
เจอโรม

@StuartNelson: นี่ดูเหมือนจะเป็นวิธีแก้ปัญหาทั่วไป ( เหมือนกันที่นี่ ) แต่เห็นได้ชัดว่าไม่ใช่คำตอบสำหรับคำถามนี้ OP ระบุชัดเจนว่ามีบทบาทอยู่ในฐานข้อมูลของเขา
Erwin Brandstetter

ยกเว้นว่าคุณกำลังเชื่อมโยงบทบาทกับผู้ใช้ ผู้ใช้มีอยู่ แต่ไม่มีบทบาท - เขาบอกอย่างชัดเจนว่าผู้ใช้มีอยู่ไม่ใช่บทบาท
Chris Sherlock

-rตัวเลือกที่ไม่จำเป็นกับ-sตัวเลือก Superuser มีแอตทริบิวต์ "สร้างบทบาท"
เดนนิส

26

เมื่อเร็ว ๆ นี้ฉันพบปัญหานี้ทันทีหลังจากติดตั้ง postgres หากมาทันทีหลังการติดตั้งคุณอาจไม่มีผู้ใช้เริ่มต้น postgres ในกรณีนี้คุณสามารถสร้าง postgres ผู้ใช้เริ่มต้นโดยใช้คำสั่งด้านล่าง

createuser -s -U $ USER

Ex: createuser -s -U $USER
enter your required role name: postgres
enter password for your the user: 

จะแจ้งให้คุณป้อนชื่อบทบาทและรหัสผ่านฐานข้อมูลที่ต้องการเมื่อคุณเสร็จสิ้นกระบวนการคุณสามารถเข้าสู่คอนโซล postgres โดยใช้คำสั่งด้านล่าง

psql -U 'your_database_name'

เช่น psql -U postgres ที่
นี่คุณต้องป้อนรหัสผ่านหากคุณได้ให้ไว้ในขณะที่สร้างผู้ใช้

หวังว่าจะช่วยได้ :)


22

ฉันใช้ OSX 10.8 และทุกสิ่งที่ฉันพยายามจะให้ไฟล์FATAL: role "USER" does not exist. เหมือนที่หลาย ๆ คนพูดที่นี่รันcreateuser -s USERแต่นั่นทำให้ฉันมีข้อผิดพลาดเดียวกัน ในที่สุดสิ่งนี้ก็ได้ผลสำหรับฉัน:

$ sudo su
# su postgres
# createuser -s --username=postgres MYUSERNAME

createuser -s --username=postgresสร้าง superuser (ธง -s) โดยการเชื่อมต่อเป็น postgres (--username = postgres ธง)

ฉันเห็นว่าคำถามของคุณได้รับคำตอบแล้ว แต่ฉันต้องการเพิ่มคำตอบนี้สำหรับผู้ที่ใช้ OSX พยายามติดตั้ง PostgreSQL 9.2.4


2
sudo su postgresคุณสามารถร่นสองบรรทัดแรกไป
ด่าน 6 ฟุต

นี่เป็นวิธีแก้ปัญหาสำหรับฉันใน Ubuntu อย่าลืมอัปเดต database.yml ของคุณเพื่อใช้ชื่อผู้ใช้เดียวกันกับด้านบน
crobicha

10

ฉันพบปัญหานี้เมื่อฉันติดตั้งแอป POSTGRES.app ของ Heroku เป็นครั้งแรก หลังจากการลองผิดลองถูกในเช้าวันหนึ่งฉันคิดว่าโค้ดบรรทัดเดียวนี้ช่วยแก้ปัญหาได้ ตามที่อธิบายไว้ก่อนหน้านี้เป็นเพราะ postgresql ไม่มีบทบาทเริ่มต้นในครั้งแรกที่ตั้งค่า และเราต้องตั้งค่านั้น

sovanlandy=# CREATE ROLE postgres LOGIN;

คุณต้องล็อกอินเข้าสู่คอนโซล psql ของคุณเพื่อใช้คำสั่ง psql นี้

นอกจากนี้ยังตั้งข้อสังเกตว่าหากคุณสร้างบทบาท 'postgre' แล้ว แต่ยังคงได้รับข้อผิดพลาดเกี่ยวกับสิทธิ์คุณจะต้องแก้ไขด้วยคำสั่ง:

sovanlandy=# ALTER ROLE postgres LOGIN;

หวังว่าจะช่วยได้!


4

ในเอกสาร Heroku; เริ่มต้นด้วยราง 4 พวกเขากล่าวว่า:

คุณจะต้องลบฟิลด์ชื่อผู้ใช้ใน database.yml ของคุณหากมี: ในไฟล์ config / database.yml ลบ: ชื่อผู้ใช้: myapp

จากนั้นคุณก็ลบบรรทัดนั้นใน "development:" หากคุณไม่ได้แจ้งไปยังฐานข้อมูลที่ทำงานภายใต้บทบาท "myapp"

บรรทัดนี้บอกทางรถไฟว่าฐานข้อมูล myapp_development ควรทำงานภายใต้บทบาทของ myapp เนื่องจากคุณอาจไม่มีบทบาทนี้ในฐานข้อมูลของคุณเราจึงจะลบออก ด้วยบรรทัดลบ Rails จะพยายามเข้าถึงฐานข้อมูลในฐานะผู้ใช้ที่ล็อกอินเข้าสู่คอมพิวเตอร์

อย่าลืมสร้างฐานข้อมูลสำหรับการพัฒนา:

$createdb myapp_development

แทนที่ "myapp" สำหรับชื่อแอปของคุณ


2

คุณมีฐานข้อมูลในเครื่องหลายฐานข้อมูลได้หรือไม่? ตรวจสอบของคุณdatabase.ymlและให้แน่ใจว่าคุณกดปุ่ม pg db ที่คุณต้องการ ใช้rails consoleเพื่อยืนยัน


2

ขั้นตอนการติดตั้งสร้างบัญชีผู้ใช้ที่เรียกว่า postgresซึ่งเชื่อมโยงกับบทบาท Postgres ดีฟอลต์ ในการใช้ Postgres คุณสามารถเข้าสู่ระบบบัญชีนั้นได้ แต่หากไม่ได้ระบุไว้อย่างชัดเจนแอปพลิเคชัน rail จะมองหาบทบาทที่แตกต่างกันโดยเฉพาะอย่างยิ่งบทบาทที่มีชื่อผู้ใช้ unix ของคุณซึ่งอาจไม่ได้สร้างขึ้นในบทบาท postgres

เพื่อเอาชนะสิ่งนั้นคุณสามารถสร้างบทบาทใหม่ได้ก่อนอื่นโดยเปลี่ยนไปใช้ postgres บทบาทเริ่มต้นซึ่งสร้างขึ้นระหว่างการติดตั้ง

sudo -i -u postgres

หลังจากที่คุณเข้าสู่ระบบบัญชี postgres คุณสามารถสร้างผู้ใช้ใหม่โดยใช้คำสั่ง:

createuser --interactive

สิ่งนี้จะแจ้งให้คุณมีตัวเลือกบางอย่างและตามคำตอบของคุณให้ดำเนินการคำสั่ง Postgres ที่ถูกต้องเพื่อสร้างผู้ใช้

ส่งผ่านชื่อบทบาทและสิทธิ์บางอย่างและสร้างบทบาทจากนั้นคุณสามารถย้ายฐานข้อมูลของคุณได้


1

คำตอบของฉันง่ายกว่ามาก เพิ่งไปที่โฟลเดอร์ db และลบคอลัมน์ id ซึ่งฉันได้พยายามสร้างอย่างจริงจัง แต่จริงๆแล้วมันถูกสร้างขึ้นโดยอัตโนมัติ ฉันยังลบ USERNAME ในไฟล์ database.yml (ภายใต้โฟลเดอร์ config)


1

ในพรอมต์คำสั่งผู้ใช้ภายใน Ubuntu แต่ไม่ใช่ผู้ใช้รูทให้พิมพ์

sudo -u postgres ชื่อผู้ใช้ createuser

ชื่อผู้ใช้ด้านบนควรตรงกับชื่อที่ระบุในข้อความ "FATAL: ไม่มีบทบาท" ชื่อผู้ใช้ ""

ป้อนรหัสผ่านสำหรับชื่อผู้ใช้

จากนั้นป้อนคำสั่งที่สร้างขึ้นอีกครั้งข้อความไม่มีอยู่


0

ฉันมาที่นี่หลังจากพยายามทำตามบทแนะนำของ Ryan Bate เกี่ยวกับการปรับใช้กับ AWS EC2 ด้วยยาง นี่คือสิ่งที่เกิดขึ้นสำหรับฉัน: เราสร้างแอปใหม่โดยใช้ "

rails new blog -d postgresql

แน่นอนสิ่งนี้จะสร้างแอปใหม่โดยมี pg เป็นฐานข้อมูล แต่ฐานข้อมูลยังไม่ได้สร้างขึ้น ด้วย sqlite คุณเพียงแค่เรียกใช้ rake db: migrate อย่างไรก็ตามด้วย pg คุณต้องสร้างฐานข้อมูล pg ก่อน ไรอันไม่ได้ทำขั้นตอนนี้ คำสั่งคือrake db:create:allจากนั้นเราสามารถเรียกใช้rake db:migrate

ส่วนที่สองคือการเปลี่ยนไฟล์ database.yml ค่าเริ่มต้นสำหรับชื่อผู้ใช้เมื่อสร้างไฟล์คือ "appname" อย่างไรก็ตามบทบาทของคุณสำหรับผู้ดูแลระบบ postgresql อาจเป็นสิ่งที่แตกต่างออกไป (อย่างน้อยก็สำหรับฉัน) ฉันเปลี่ยนเป็นชื่อของฉัน (ดูคำแนะนำด้านบนเกี่ยวกับการสร้างชื่อบทบาท) และฉันก็พร้อมที่จะไป

หวังว่านี่จะช่วยได้


0

หลังจากติดตั้งและถอนการติดตั้ง Postgres เป็นจำนวนมากนี่คือสิ่งที่ดูเหมือนว่าจะทำงานได้ดีสำหรับฉันกับ Os X Mavericks, Rails 4 และ Ruby 2

  1. ในไฟล์ database.yml ฉันเปลี่ยนชื่อผู้ใช้เริ่มต้นเป็นชื่อผู้ใช้คอมพิวเตอร์ของฉันซึ่งสำหรับฉันเป็นแค่ "ผู้ดูแลระบบ"

  2. ในบรรทัดคำสั่งฉันเรียกใช้ rake db: create: all

  3. จากนั้นฉันเรียกใช้ rake db: migrate

  4. เมื่อฉันเรียกใช้เซิร์ฟเวอร์รางและตรวจสอบโฮสต์ในพื้นที่จะมีข้อความว่า "ยินดีต้อนรับบนเรือ"


0

คุณอาจสามารถแก้ไขปัญหานี้ได้โดยการเรียกใช้initdb -U postgres -D /path/to/dataหรือเรียกใช้ในฐานะผู้ใช้ postgres เนื่องจากค่าเริ่มต้นเป็นผู้ใช้ปัจจุบัน กล!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.