psql: FATAL: ไม่มีบทบาท“ postgres”


404

ฉันเป็นมือใหม่

ฉันติดตั้ง postgres.app สำหรับ mac ฉันกำลังเล่นกับคำสั่ง psql และฉันทิ้งฐานข้อมูล postgres โดยไม่ตั้งใจ ฉันไม่รู้ว่ามีอะไรอยู่ในนั้น

ฉันกำลังทำงานเกี่ยวกับการสอน: http://www.rosslaird.com/blog/building-a-project-with-mezzanine/

และฉันติดอยู่ที่ sudo -u postgres psql postgres

ข้อความผิดพลาด: psql: FATAL: role "postgres" does not exist

$ ที่ psql

/Applications/Postgres.app/Contents/MacOS/bin/psql

นี่คือสิ่งที่พิมพ์ออกมา psql -l

                                List of databases
    Name    |   Owner    | Encoding | Collate | Ctype |     Access privileges     
------------+------------+----------+---------+-------+---------------------------
 user       | user       | UTF8     | en_US   | en_US | 
 template0  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
 template1  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
(3 rows)

ดังนั้นขั้นตอนที่ฉันควรทำคืออะไร? ลบทุกอย่างที่เกี่ยวข้องกับ psql และติดตั้งใหม่ทุกอย่างหรือไม่

ขอบคุณสำหรับความช่วยเหลือ!


1
รีสตาร์ทคอมพิวเตอร์ มั่นใจว่า Launchd จากbrew services start postresqlถูกดำเนินการ
Michael Dimmitt

คำตอบ:


410

หมายเหตุ: หากคุณติดตั้ง postgres โดยใช้ homebrew โปรดดูความคิดเห็นจาก @ user3402754 ด้านล่าง

โปรดทราบว่าข้อความแสดงข้อผิดพลาดไม่ได้พูดถึงฐานข้อมูลที่หายไปมันพูดถึงบทบาทที่หายไป ในภายหลังในกระบวนการเข้าสู่ระบบก็อาจสะดุดฐานข้อมูลที่ขาดหายไป

แต่ขั้นตอนแรกคือการตรวจสอบบทบาทที่หายไป: เอาต์พุตภายในpsqlคำสั่ง\duคืออะไร ในระบบ Ubuntu ของฉันบรรทัดที่เกี่ยวข้องจะเป็นดังนี้:

                              List of roles
 Role name |            Attributes             | Member of 
-----------+-----------------------------------+-----------
 postgres  | Superuser, Create role, Create DB | {}        

หากไม่มีอย่างน้อยหนึ่งบทบาทด้วยแสดงsuperuserว่าคุณมีปัญหา :-)

หากมีหนึ่งคุณสามารถใช้เพื่อเข้าสู่ระบบ และมองไปที่การส่งออกของคุณ\lคำสั่ง: สิทธิ์สำหรับuserบนtemplate0และtemplate1ฐานข้อมูลเป็นเช่นเดียวกับในระบบ Ubuntu postgresของฉันสำหรับใช้ super ดังนั้นฉันคิดว่าการตั้งค่าของคุณใช้ง่ายuserเป็น superuser ดังนั้นคุณสามารถลองใช้คำสั่งนี้เพื่อเข้าสู่ระบบ:

sudo -u user psql user

ถ้าuserเป็น superuser DB จริงๆคุณสามารถสร้าง DB superuser อื่นและฐานข้อมูลส่วนตัวที่ว่างเปล่าสำหรับเขา:

CREATE USER postgres SUPERUSER;
CREATE DATABASE postgres WITH OWNER postgres;

แต่เนื่องจาก postgres.app ตั้งค่าของคุณดูเหมือนจะไม่ทำเช่นนี้คุณไม่ควร ปรับตัวเข้ากับการสอนอย่างง่าย


10
สำหรับฉันผู้ใช้ไม่ได้ถูกสร้างขึ้น - ใช้งานแทนCREATE USER postgres WITH SUPERUSER PASSWORD 'password'; postgres v10 แทน
arcseldon

229
หากคุณติดตั้ง Postgres homebrewคุณต้องรัน/usr/local/opt/postgres/bin/createuser -s postgresในเทอร์มินัลของคุณ
user3402754

7
ฉันต้องวิ่ง/usr/local/opt/postgresql/bin/createuser -s postgres
user1807782

1
@ user1807782 คุณบันทึกวันของฉัน ฉันคิดว่าคุณควรโฆษณาสิ่งนี้เป็นคำตอบ
tolga

1
หากคุณกำลังใช้ postgres รุ่นที่ระบุคุณจะต้องรวมรุ่นในเส้นทาง -/usr/local/opt/postgresql@11/bin/createuser -s postgres
Digitrance

264

กุญแจสำคัญคือ "ฉันติดตั้ง postgres.app สำหรับ mac" แอปพลิเคชันนี้ตั้งค่าการติดตั้ง PostgreSQL แบบโลคัลด้วย superuser ฐานข้อมูลที่มีชื่อบทบาทเหมือนกับชื่อล็อกอิน (แบบสั้น) ของคุณ

เมื่อ Postgres.app เริ่มต้นขึ้นมันจะสร้างฐานข้อมูล $ USER ซึ่งเป็นฐานข้อมูลเริ่มต้นสำหรับ psql เมื่อไม่มีการระบุ ผู้ใช้เริ่มต้นคือ $ USER โดยไม่มีรหัสผ่าน

สคริปต์บางคน (เช่นการสำรองฐานข้อมูลที่สร้างขึ้นด้วยpgdumpใน systsem Linux) และแบบฝึกหัดที่จะถือว่าเป็น superuser postgresมีชื่อบทบาทดั้งเดิมของ

คุณสามารถทำให้การติดตั้งในเครื่องของคุณดูเก่าขึ้นและหลีกเลี่ยงปัญหาเหล่านี้ด้วยการทำเพียงครั้งเดียว:

/Applications/Postgres.app/Contents/Versions/9.*/bin/createuser -s postgres

ซึ่งจะทำให้FATALเหล่านั้น: บทบาท "postgres" ไม่มีอยู่ให้หายไป


119
หากคุณใช้ postgres จาก Homebrew คุณต้อง/usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres(สำหรับรุ่น 9.2.4 ชัด)
Roger Lipscombe

1
สำหรับ postgres.app 9.3 พวกเขาดูเหมือนจะจัดเรียงไดเรกทอรีใหม่แล้ว ฉันพยายาม: /Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres แต่สิ่งนี้สร้างข้อความ eror เดียวกัน: "createuser: ไม่สามารถเชื่อมต่อกับฐานข้อมูล postgres: FATAL: บทบาท" postgres "ไม่มีอยู่ "
Michael Coxon

7
/Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgresวิ่งอย่างถูกต้องสำหรับฉัน
cjspurgeon

9
@RogerLipscombe ถ้าคุณทำงานbrew link postgresqlหลังจากการติดตั้งก็ไม่จำเป็นที่จะผนวกเส้นทางทั้งหมดที่จะcreateuserเป็นที่เรียบง่ายcreateuser -s postgresจะทำงานได้ดี
AlessioX

2
createuser -s postgresทำงานให้ฉัน ฉันติดตั้ง postgres ด้วย Homebrew
biniam

228

สำหรับ MAC:

  1. ติดตั้ง Homebrew
  2. brew install postgres
  3. initdb /usr/local/var/postgres
  4. /usr/local/Cellar/postgresql/<version>/bin/createuser -s postgres หรือ /usr/local/opt/postgres/bin/createuser -s postgresซึ่งจะใช้รุ่นล่าสุด
  5. เริ่มเซิร์ฟเวอร์ postgres ด้วยตนเอง: pg_ctl -D /usr/local/var/postgres start

เพื่อเริ่มต้นเซิร์ฟเวอร์เมื่อเริ่มต้น

  • mkdir -p ~/Library/LaunchAgents
  • ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
  • launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

ตอนนี้มันถูกตั้งค่าแล้วเข้าสู่ระบบโดยใช้ psql -U postgres -h localhostหรือใช้ PgAdmin สำหรับ GUI

โดยผู้ใช้เริ่มต้น postgresจะไม่มีรหัสผ่านเข้าสู่ระบบใด ๆ

ตรวจสอบเว็บไซต์นี้สำหรับบทความเพิ่มเติมเช่นนี้: https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7


3
ด้วยการติดตั้ง Brew ใหม่ล่าสุดคุณสามารถทำได้brew services start postgresqlเพื่อเริ่ม postgres
Automatico

<3 <3 <3 <3 <3 <3
Adeel Ahmad

นี่คือคำตอบที่ดีที่สุด
Alejandro Pablo Tkachuk

39
createuser postgres --interactive

หรือสร้าง superuser postgresl ด้วย

createuser postgres -s


ฉันพบคำตอบนี้มีประโยชน์เมื่อ pgadmin ของฉันเก็บไว้เพื่อขอผู้ใช้ postgres และฉันไม่ได้มีบทบาท postgres เริ่มต้นด้วยคำสั่งนี้สร้างขึ้นฉันเพิ่ม pw autogenerated ใน pgadmin ของฉันและแก้ไขปัญหา!
theusual

วิธีนี้ใช้ได้ผลสำหรับฉัน .. แต่ด้วยวิธีนี้: "สร้างผู้ใช้ postgres"
Roberto Rodriguez

31

เรื่องนี้เกิดขึ้นเมื่อคุณเรียกใช้initdbกับผู้ใช้ที่ไม่ได้เป็น ID postgresโดยไม่ต้องระบุpostgresชื่อผู้ใช้ด้วยหรือ--username=postgres-U postgres

จากนั้นสร้างคลัสเตอร์ฐานข้อมูลด้วยบัญชีผู้ใช้ของระบบที่คุณใช้ในการเรียกใช้ initdb และได้รับสิทธิ์ superuser

หากต้องการแก้ไขเพียงสร้างผู้ใช้ใหม่ที่postgresมีชื่อพร้อมตัวเลือก--superuserโดยใช้createuserยูทิลิตี้ที่มาพร้อมกับ Postgres ยูทิลิตี้สามารถพบได้ในbinไดเรกทอรีPostgres เช่น

createuser --superuser postgres

หากคุณมีชื่อโฮสต์ที่กำหนดเองหรือพอร์ตแล้วให้แน่ใจว่าได้ตั้งค่าตัวเลือกที่เหมาะสม

อย่าลืมลบบัญชีผู้ใช้อื่นที่สร้างขึ้นโดย initdb


2
นี่คือคำตอบที่ให้ข้อมูลมากที่สุด
MyWrathAcademia

17

สำหรับฉันรหัสนี้ทำงาน:

/Applications/Postgres.app/Contents/Versions/9.4/bin/createuser -s postgres

มันมาจากที่นี่: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4


ทำงานให้ฉันด้วย! คุณบันทึกเบคอนของฉัน
Dave Munger

1
ฉันไม่ได้รับบทบาท "ฉัน"
SuperUberDuper

หมายความว่าผู้ใช้ posgres ใหม่นี้จะไม่มีรหัสผ่านหรือไม่?
olaoluwa_98

16

ฉันต้องการยกเลิกการตั้งค่า$PGUSER:

$ unset PGUSER
$ createuser -s postgres

1
โอ้มนุษย์ในที่สุดได้รับสิ่งที่เป็นปัญหา กลายเป็นว่าคุณกำลังพยายามสร้างผู้ใช้ postgres เป็นผู้ใช้ postgres
Taras Matsyk

14

ก่อนอื่นคุณต้องสร้างผู้ใช้:

sudo -u postgres createuser --superuser $USER

หลังจากคุณสร้างฐานข้อมูล:

sudo -u postgres createdb $USER

เปลี่ยน $USERเป็นชื่อผู้ใช้ระบบของคุณ

ท่านสามารถเข้าดูโซลูชั่นที่สมบูรณ์ที่นี่



4

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

คุณยังสามารถสร้างใหม่ได้ด้วยคำสั่ง SQL CREATE DATABASE postgres;

โปรดทราบว่าการสอนที่กล่าวถึงในคำถามไม่ได้เขียนไว้postgres.appในใจ ตรงกันข้ามกับ PostgreSQL สำหรับ Unix โดยทั่วไปpostgres.appพยายามที่จะดูเหมือนแอปพลิเคชันทั่วไปซึ่งตรงข้ามกับบริการที่postgresผู้ใช้เฉพาะจะได้รับสิทธิพิเศษที่แตกต่างจากผู้ใช้ปกติของคุณpostgres.appถูกเรียกใช้และจัดการโดยบัญชีของคุณเอง

ดังนั้นแทนที่จะเป็นคำสั่งนี้: sudo -u postgres psql -U postgresมันจะเป็นมากกว่าจิตวิญญาณของ postgres.app ที่เพิ่งจะออก: psqlซึ่งจะเชื่อมต่อกับฐานข้อมูลที่ตรงกับชื่อผู้ใช้ของคุณโดยอัตโนมัติและด้วยบัญชี db ของชื่อเดียวกันที่เกิดขึ้นเป็น superuser ดังนั้น มันสามารถทำสิ่งใดก็ตามที่ได้รับอนุญาตอย่างชาญฉลาด


ตกลง. แต่ทำไมฉันถึงได้รับข้อผิดพลาดERROR: cannot drop the currently open databaseเมื่อฉันพยายามลบผู้ใช้ db? ดังนั้นการใช้ postgres.app นี้จึงไม่ใช่วิธีที่ดีใช่ไหม
user805981

คุณไม่สามารถวางฐานข้อมูลในขณะที่เชื่อมต่อกับมัน ทำไมคุณต้องการลบ มันอยู่ที่นี่เพื่อความสะดวกของคุณ
Daniel Vérité

ฉันแค่อยากจะดูว่าฉันสามารถทำได้ ดังนั้นมันเหมือนกับฐานข้อมูลเริ่มต้นที่ถูกต้องเมื่อฉันบูท psql และ postgres.app ของฉัน ตอนนี้เกี่ยวกับสิทธิ์การเข้าถึง? ฉันไม่สามารถตั้งค่าได้อีกต่อไปหรือ ฉันเห็นว่า template0 และ template1 มีสิทธิ์การเข้าถึง
user805981

@ user805981 Postgres.appสำหรับการทดสอบและการพัฒนา มันเป็นแพ็คเกจ PostgreSQL จาก Heroku ที่ออกแบบมาเพื่อให้ง่ายขึ้นสำหรับผู้ใช้ Mac ที่พัฒนาด้วย Ruby on Rails เพื่อทดสอบกับ PostgreSQL แทน SQLite เริ่มต้น Rails ใช้ tended เพื่อทดสอบกับ SQLite และปรับใช้กับ PostgreSQL ซึ่งทำให้เกิดปัญหาทุกประเภทดังนั้น Heroku จึงพยายามทำให้ทดสอบ PostgreSQL ได้ง่ายขึ้นเช่นกัน Postgres.appใช้ได้สำหรับการทดสอบ แต่ฉันจะไม่พิจารณาใช้สำหรับการผลิตหรือข้อมูลจริงนั่นไม่ใช่สิ่งที่มันมีไว้สำหรับ
Craig Ringer

4

สำหรับสิ่งที่คุ้มค่าฉันมี Ubuntu และติดตั้งแพคเกจมากมายและมันขัดแย้งกับมัน

สำหรับฉันคำตอบที่ถูกคือ:

sudo -i -u postgres-xc
psql

2

นี่เป็นสิ่งเดียวที่แก้ไขได้สำหรับฉัน:

createuser -s -U $USER

2
สิ่งนี้ทำให้ผู้ใช้ปัจจุบันเป็นผู้ใช้ระบบ superuser แทนที่จะเป็นเพียง super Postgres ฉันจะบอกว่านี่เป็นความคิดที่ไม่ดีเพราะมันหลีกเลี่ยงนโยบายความปลอดภัยตามปกติ คุณควรsudoให้ผู้ใช้ได้รับสิทธิ์ superuser ชั่วคราว
Sean Dawson

1

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

คำแนะนำ - ทำการสำรองข้อมูลของฐานข้อมูลให้ปลอดภัยยิ่งขึ้น


0

ฉันไม่คิดว่าจำเป็นต้องใช้ sudo ที่นี่เพราะ psql -l ส่งคืนรายการฐานข้อมูล สิ่งนี้บอกฉันว่า initdb ทำงานภายใต้ผู้ใช้ปัจจุบันของผู้ใช้ไม่ใช่ผู้ใช้ postgres

คุณสามารถ:

psql

และทำการสอนต่อ

ฉันอยากจะแนะนำประเด็นทั่วไปของ AH ในการสร้างผู้ใช้ postgres และ db เนื่องจากแอปพลิเคชันจำนวนมากอาจคาดหวังว่าสิ่งนี้จะมีอยู่

คำอธิบายสั้น ๆ :

PostgreSQL จะไม่ทำงานด้วยสิทธิ์การเข้าถึงระดับผู้ดูแลระบบปฏิบัติการ แต่จะทำงานกับผู้ใช้ทั่วไปและเพื่อสนับสนุนการตรวจสอบสิทธิ์เพื่อน (ขอให้ระบบปฏิบัติการที่พยายามเชื่อมต่อ) จะสร้างผู้ใช้และ db กับผู้ใช้ที่เรียกใช้กระบวนการเริ่มต้น ในกรณีนี้มันเป็นผู้ใช้ปกติของคุณ


ล้างความแตกต่างที่สำคัญบางประการใน postgres ขอบคุณ.
imsrgadich

0

ฉันติดอยู่กับปัญหานี้เมื่อbrew services stop postgresqlวันก่อนดำเนินการ
วันต่อไปนี้: brew services start postgresqlจะไม่ทำงาน นี่เป็นเพราะตามที่แสดงเมื่อคุณติดตั้งโดยใช้ homebrew postgresql ใช้ launchd ... ซึ่งโหลดเมื่อเปิดเครื่องคอมพิวเตอร์

ความละเอียด:
brew services start postgresql
รีสตาร์ทคอมพิวเตอร์ของคุณ


0

\duกลับมาสั่ง:

ชื่อบทบาท = postgres@implicit_files

และคำสั่งpostgres=# \password postgresส่งคืนข้อผิดพลาด:

ข้อผิดพลาด: ไม่มีบทบาท "postgres"

แต่นั่น postgres=# \password postgres@implicit_filesใช้ได้ดี

นอกจากนี้หลังจาก sudo -u postgres createuser -s postgresที่ตัวแปรแรกยังทำงาน

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