Createuser: ไม่สามารถเชื่อมต่อกับฐานข้อมูล postgres: FATAL: ไม่มีบทบาท“ tom”


92

ฉันพยายามตั้งค่า Postgres เป็นครั้งแรกและฉันต้องการสร้างผู้ใช้ที่มีสิทธิ์ในการอ่านและสร้างฐานข้อมูล อย่างไรก็ตามเมื่อฉันใช้:

createuser username

ในเทอร์มินัลของฉันฉันได้รับข้อความต่อไปนี้:

createuser: ไม่สามารถเชื่อมต่อกับฐานข้อมูล postgres: FATAL: ไม่มีบทบาท "tom"

Tom เป็นบัญชีผู้ใช้ Ubuntu ของฉันที่ฉันลงชื่อเข้าใช้อยู่ตอนนี้ ฉันกำลังพยายามสร้างชื่อผู้ใช้ของ "postgres" จากนั้นpsql -U psql template1จึงสร้างฐานข้อมูลและกำหนดเจ้าของให้กับแอป Rails


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

คำตอบ:


132

คุณพูดถึง Ubuntu ดังนั้นฉันจะเดาว่าคุณติดตั้งแพ็คเกจ PostgreSQL จาก Ubuntu ผ่าน apt

หากเป็นเช่นนั้นpostgresบัญชีผู้ใช้ PostgreSQL มีอยู่แล้วและได้รับการกำหนดค่าให้สามารถเข้าถึงได้ผ่านการpeerพิสูจน์ตัวตนสำหรับซ็อกเก็ต unix ในpg_hba.conf. คุณสามารถเข้าถึงได้โดยรันคำสั่งในฐานะpostgresผู้ใช้ยูนิกซ์เช่น:

sudo -u postgres createuser owning_user
sudo -u postgres createdb -O owning_user dbname

ทั้งหมดนี้อยู่ในเอกสารUbuntu PostgreSQLซึ่งเป็นผลงานแรกของ Google สำหรับ "Ubuntu PostgreSQL" และมีคำถามเกี่ยวกับ Stack Overflow มากมาย

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


หลังจากสร้าง owning_user แล้วคุณจะเชื่อมต่อกับผู้ใช้รายนี้ได้อย่างไร? ฉันหมายถึงการเชื่อมต่อผู้ใช้เริ่มต้นที่ฉันใช้ sudo -u postgres psql postgres วิธีเดียวกับการเชื่อมต่อ owning_user?
Jony

2
สามตัวเลือก (a) ตั้งรหัสผ่านสำหรับผู้ใช้นั้นและแก้ไขpg_hba.confเพื่อใช้md5auth สำหรับผู้ใช้นั้น (ดูคู่มือ) (b) สร้างผู้ใช้ระบบปฏิบัติการโดยใช้ชื่อเดียวกันและใช้peerauth ต่อไป หรือ (c) ขั้นสูงขึ้นสร้างการpg_ident.confแมปเพื่อให้ผู้ใช้ระบบปฏิบัติการของคุณเข้าสู่ระบบในฐานะผู้ใช้ใหม่
Craig Ringer

66

ดูส่วนสำคัญของ git พร้อมคำแนะนำที่นี่

เรียกใช้สิ่งนี้:

 sudo -u postgres psql

หรือ

psql -U postgres

ในเทอร์มินัลของคุณเพื่อเข้าสู่ postgres

หมายเหตุ: หากคุณใช้ Mac และทั้งสองคำสั่งข้างต้นล้มเหลวให้ข้ามไปที่หัวข้อเกี่ยวกับ Mac ด้านล่าง

postgres=#

วิ่ง

CREATE USER new_username;

หมายเหตุ: แทนที่ new_username ด้วยผู้ใช้ที่คุณต้องการสร้างในกรณีของคุณจะเป็นทอม

postgres=# CREATE USER new_username;
CREATE ROLE

เนื่องจากคุณต้องการให้ผู้ใช้สามารถสร้างฐานข้อมูลได้คุณจึงต้องเปลี่ยนบทบาทเป็น superuser

postgres=# ALTER USER new_username SUPERUSER CREATEDB;
ALTER ROLE

เพื่อยืนยันว่าทุกอย่างประสบความสำเร็จ

postgres=# \du
                         List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
new_username     | Superuser, Create DB                           | {}
postgres         | Superuser, Create role, Create DB, Replication | {}
root             | Superuser, Create role, Create DB              | {}

postgres=# 

อัปเดต / แก้ไข (สำหรับ Mac):

ฉันเพิ่งพบข้อผิดพลาดที่คล้ายกันบน Mac ของฉัน:

psql: FATAL: role "postgres" does not exist

นี่เป็นเพราะการติดตั้งของฉันถูกตั้งค่าด้วย superuser ฐานข้อมูลที่มีชื่อบทบาทเหมือนกับชื่อล็อกอิน (แบบสั้น) ของคุณ

แต่สคริปต์ลินุกซ์บางตัวถือว่า superuser มีชื่อบทบาทดั้งเดิมของ postgres

ฉันจะแก้ไขปัญหานี้ได้อย่างไร

หากคุณติดตั้งด้วยการhomebrewรัน:

/usr/local/opt/postgres/bin/createuser -s postgres

หากคุณใช้ postgres เวอร์ชันใดรุ่นหนึ่งให้พูด10.5แล้วเรียกใช้:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s postgres

หรือ:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s new_username

หรือ:

/usr/local/opt/postgresql@11/bin/createuser -s postgres

หากคุณติดตั้งpostgres.appสำหรับ Mac ให้รัน:

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

PS: แทนที่ 10.5 ด้วยเวอร์ชัน PostgreSQL ของคุณ


สิ่งนี้ได้ผลเพื่อเข้าสู่ postgres:psql -U postgres
leontalbot

29
sudo -u postgres createuser -s tom 

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


7

1- เข้าสู่ระบบเป็นผู้ใช้ PostgreSQL เริ่มต้น (postgres)

sudo -u postgres -i

2- ในฐานะผู้ใช้ postgres เพิ่มผู้ใช้ฐานข้อมูลใหม่โดยใช้createuserคำสั่ง

[postgres]$ createuser --interactive

3- ทางออก

[postgres]$ exit

5

ข้อผิดพลาดของคุณถูกโพสต์ในเอกสารอย่างเป็นทางการ คุณสามารถอ่านบทความนี้

ฉันได้คัดลอกเหตุผลของคุณ (และไฮเปอร์ลิงก์ URL) จากบทความนั้น:

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

สำหรับวัตถุประสงค์ของคุณคุณสามารถทำได้:

1) สร้างบัญชีผู้ใช้ PostgreSQL:

sudo -u postgres createuser tom -d -P

( -Pตัวเลือกในการตั้งรหัสผ่าน-dตัวเลือกสำหรับอนุญาตให้สร้างฐานข้อมูลสำหรับชื่อผู้ใช้ของคุณ 'ทอม' โปรดทราบว่า 'ทอม' คือชื่อผู้ใช้ระบบปฏิบัติการของคุณด้วยวิธีนี้คุณสามารถดำเนินการคำสั่ง PostgreSQL ได้โดยไม่ต้องเข้าsudo)

2) ตอนนี้คุณควรจะสามารถดำเนินการcreatedbและคำสั่ง PostgreSQL อื่น ๆ


1

ฉันมีปัญหาเดียวกันฉันแค่ทำสิ่งนี้

sudo su - postgres

createuser odoo -U postgres -dRSP #P สำหรับรหัสผ่าน ( odooหรือชื่อผู้ใช้ที่คุณต้องการให้เข้าถึง postgres)



0

หากคุณไม่ต้องการเปลี่ยนวิธีการรับรองความถูกต้อง (ระบุ) และยุ่งกับpg_hba.conf ให้ใช้สิ่งนี้:

เข้าสู่ระบบครั้งแรกในฐานะผู้ใช้เริ่มต้น

 sudo su - posgres

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

postgres=# CREATE USER userOS WITH PASSWORD 'garbage' CREATEDB;

คุณสามารถยืนยันผู้ใช้ของคุณด้วยบทบาทที่เกี่ยวข้องกับ

postgres=#  \du

คุณสามารถสร้างฐานข้อมูลและตรวจสอบได้ด้วย

psql -d dbName
\l
\q

-4

คุณต้องเรียกใช้ initdb ก่อน มันจะสร้างคลัสเตอร์ฐานข้อมูลและการตั้งค่าเริ่มต้น

ดูวิธีกำหนดค่า postgresql เป็นครั้งแรก? และhttp://www.postgresql.org/docs/8.4/static/app-initdb.html


5
สิ่งนี้ไม่ถูกต้องทั้งหมด หากผู้ใช้ไม่ได้เรียกใช้initdbพวกเขาจะไม่มีเซิร์ฟเวอร์ฐานข้อมูลทำงานและยอมรับการเชื่อมต่อเพื่อสร้างข้อความแสดงข้อผิดพลาดที่รายงาน โปรดลบคำตอบที่ทำให้เข้าใจผิดนี้ (BTW ในอนาคตโปรดลิงก์ไปที่ / docs / current / static / เพื่อหลีกเลี่ยงการสะสมลิงก์ที่ค้างอยู่)
Craig Ringer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.