ข้อผิดพลาด PostgreSQL: ร้ายแรง: บทบาท“ ชื่อผู้ใช้” ไม่มีอยู่


732

ฉันตั้งค่า PostgreSQL 9.1 แล้ว ฉันไม่สามารถทำอะไรกับ PostgreSQL: ไม่สามารถcreatedbไม่สามารถcreateuser; การดำเนินการทั้งหมดคืนข้อความข้อผิดพลาด

Fatal: role h9uest does not exist

h9uestเป็นชื่อบัญชีของฉันและฉันsudo apt-get installPostgreSQL 9.1 ภายใต้บัญชีนี้
ข้อผิดพลาดที่คล้ายกันยังคงมีอยู่สำหรับrootบัญชี


1
หลังจากนั้นคุณอาจFATAL: role "user" is not permitted to log inพบตรวจสอบdba.stackexchange.com/questions/57723/…สำหรับสิ่งนั้น
kqw

19
ฉันตอบคำถามนี้ที่นี่ อ่านบทช่วยสอนนี้ด้วย " วิธีติดตั้ง Postgres สำหรับ Ubuntu Linux "
ruzenhack

@Ruzenhack ลิงก์การสอนเป็นสิ่งที่ฉันต้องการ! ชัดเจนและเรียบง่าย
dwanderson

4
psql -h localhost -U postgres
Metin Atalay

หากคุณได้รับข้อผิดพลาดrole doesn't existและข้อผิดพลาดcan't create role, it already existsลองดูคำตอบนี้: stackoverflow.com/a/56658832/1689770
Jonathan

คำตอบ:


774

ใช้ผู้ใช้ระบบปฏิบัติการ postgresเพื่อสร้างฐานข้อมูลของคุณ - ตราบใดที่คุณยังไม่ได้ตั้งค่าบทบาทฐานข้อมูลด้วยสิทธิ์ที่จำเป็นที่สอดคล้องกับผู้ใช้ระบบปฏิบัติการของคุณด้วยชื่อเดียวกัน ( h9uestในกรณีของคุณ):

sudo -u postgres -i

ตามคำแนะนำของที่นี่หรือที่นี่

จากนั้นลองอีกครั้ง พิมพ์เมื่อทำกับการดำเนินงานเป็นผู้ใช้ระบบexitpostgres

หรือดำเนินการตามคำสั่งเดียวcreateuserเป็นpostgresด้วยsudoเช่นแสดงให้เห็นโดย Dreesในคำตอบอื่น

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

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

ฉันเคยได้ยินเรื่องการตั้งค่าแปลก ๆ ด้วยชื่อผู้ใช้ที่ไม่ได้มาตรฐานหรือในกรณีที่ไม่มีผู้ใช้ระบบปฏิบัติการอยู่ คุณต้องปรับกลยุทธ์ของคุณที่นั่น

อ่านเกี่ยวกับบทบาทฐานข้อมูลและการตรวจสอบสิทธิ์ลูกค้าในคู่มือ


1
มันเป็นไปไม่ได้ที่จะทำงานsudo etcในฐานะผู้ใช้ postgres ... วิธีการติดตั้งโปรแกรม? ดูปัญหานี้ติดตั้ง S2geometry
Peter Krauss

su postgresทั้งนี้ขึ้นอยู่กับการกำหนดค่าหนึ่งอาจจะเพียงแค่ความต้องการ
Fabien Snauwaert

1
sudo -u postgresไม่ทำงานในขณะที่ใช้sudo -u postgres -iงานได้! อะไร-iธงทำอย่างไร
parsecer

1
@parsecer: เชลล์แบบโต้ตอบเริ่มต้นคล้ายกับsuแต่ขึ้นอยู่กับสิทธิ์ของ sudo man sudoดู
Erwin Brandstetter

284

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

https://stackoverflow.com/a/16974197/2433309

ในระยะสั้นวิ่ง

sudo -u postgres createuser owning_user

สร้างบทบาทด้วยชื่อ owning_user (ในกรณีนี้คือ h9uest) หลังจากนั้นคุณสามารถเรียกใช้rake db:createจากเทอร์มินัลภายใต้ชื่อบัญชีใด ๆ ที่คุณตั้งค่าโดยไม่ต้องเข้าสู่สภาพแวดล้อม Postgres


29
หากคุณได้รับข้อผิดพลาด "สิทธิ์ไม่เพียงพอ" หลังจากนี้คุณสามารถผนวกแฟล็ก -s เข้ากับคำสั่งด้านบน สิ่งนี้จะสร้างผู้ใช้ใหม่ของคุณเป็น superuser โปรดระวังความปลอดภัยของสิ่งนี้หากคุณตัดสินใจที่จะทำ
sarink

1
ฉันได้รับ "สิทธิ์ไม่เพียงพอ" แต่ตอนนี้ฉันได้รับข้อผิดพลาด: มีชื่อผู้ใช้ "ม้วน" แล้ว
Wylliam Judd

4
@ConnorLeech คุณสามารถแทนที่ 'postgres' ด้วยชื่อผู้ใช้ PG super ของคุณ ในกรณีของฉันมันเป็นชื่อของฉัน
myfashionhub

1
ฉันยังต้องใช้-sและไม่จำเป็นต้องใช้sudo -u postgres(เพิ่งใช้createuser new_userงานได้ดี)
Meekohi

2
psql: FATAL: role "jonny" does not existโอเค sudo -u postgres -s createuser jonnyแล้วทำไม createuser: creation of new role failed: ERROR: role "jonny" already exists
Jonathan

134
sudo su - postgres

psql template1

การสร้างบทบาทบน pgsql ด้วยสิทธิ์เป็น "superuser"

CREATE ROLE username superuser;
eg. CREATE ROLE demo superuser;

จากนั้นสร้างผู้ใช้

CREATE USER username; 
eg. CREATE USER demo;

กำหนดสิทธิ์ให้กับผู้ใช้

GRANT ROOT TO username;

จากนั้นเปิดใช้งานการเข้าสู่ระบบของผู้ใช้นั้นเพื่อให้คุณสามารถเรียกใช้เช่น: psql template1จาก$สถานีปกติ:

ALTER ROLE username WITH LOGIN;

4
ฉันเพิ่งติดตั้ง PostgreSQL 9.4.4 ใหม่และสามารถใช้การติดตามเพื่อสร้าง superuser ใหม่: CREATE ROLE username superuser createdb login; ซึ่งรวมทั้งสามขั้นตอน ...
iPad Guy

25
# ประทานสิทธิ์ให้ฉัน ข้อผิดพลาด: ไม่มีบทบาท "รูท"
แช็

6
รุ่นที่ง่ายกว่า: sudo -u postgres createuser --superuser $USER; sudo -u postgres createdb $USER
Zach Estela

2
@shacker#GRANT postgres TO username
7kemZmani

ฉันใช้รูทเพื่อเริ่มเซิร์ฟเวอร์จากนั้น `` `psql -U postgres -h 127.0.0.1 - คำสั่ง" สร้าง postgresondocker USER USER พร้อมรหัสผ่าน 'postgresondocker' ที่เหนือกว่า && \ createdb -O postgresondocker postgresondocker`` ฉันสามารถใช้รูทเพื่อทำสิ่งนี้ได้หรือไม่ถ้าฉันเพิ่มเข้าไปใน pg_ident?
Shivangi Singh

85

การติดตั้ง postgres โดยใช้apt-getจะไม่สร้างบทบาทผู้ใช้หรือฐานข้อมูล

วิธีสร้างบทบาท superuser และฐานข้อมูลสำหรับบัญชีผู้ใช้ส่วนบุคคลของคุณ:

sudo -u postgres createuser -s $(whoami); createdb $(whoami)


1
ฉันต้องการเรียกใช้ส่วนที่สองเป็น:sudo -u postgres createdb $(whoami)
SanD

2
@SanD หากคุณสร้างบัญชีผู้ใช้ของคุณเองในฐานะผู้ใช้ขั้นสูง (ผ่านการ-sตั้งค่าสถานะในคำสั่งแรก) คุณสามารถสร้างฐานข้อมูลด้วยตัวคุณเอง คุณจะไม่จำเป็นต้องใช้เป็นcreatedb postgres
Miles Erickson

2
คำตอบที่ดี! ช่วยฉันแก้จุดบกพร่องหลายชั่วโมง !!
Aminu Kano

79

สิ่งนี้ใช้ได้กับฉัน:

psql -h localhost -U postgres

กรุณาเพิ่มรหัสผ่านสำหรับผู้ใช้ข้างต้น
Chaudhry Waqas

1
@Vincent หากรหัสผ่านไม่เคยเปลี่ยนหลังจากการติดตั้ง PostgreSQL ตามค่าเริ่มต้นคือpostgres(ทดสอบบน Linux และ Windows)
silvioprog

1
role postgres does not exist
Jacob Schneider

15

วิธีการทำงาน

  1. vi /etc/postgresql/9.3/main/pg_hba.conf
  2. local all postgres peer ที่นี่เปลี่ยนเพื่อนเพื่อไว้วางใจ
  3. เริ่มต้นใหม่, sudo service postgresql restart

  4. ตอนนี้ลอง psql -U postgres


1
มันควรจะชัดเจนว่าtrustวิธีการนี้จะแนะนำให้ใช้ในสภาพแวดล้อมที่ปลอดภัยอย่างสมบูรณ์เท่านั้น ในขณะที่การเข้าถึงจากการเชื่อมต่อที่ไม่น่าเชื่อถือเป็นไปได้อย่าเปิดเผยคลัสเตอร์ DB ของคุณเช่นนั้น
Erwin Brandstetter

อันนี้ดี
horoyoi o

ตรวจสอบ: หากบริการ postgresql ไม่ได้เริ่มทำงานอาจเป็นไปได้ว่าอาจเกิดข้อผิดพลาดบางอย่างในไฟล์pg_hba.conf
Walk


11
psql postgres

postgres=# CREATE ROLE username superuser;
postgres=# ALTER ROLE username WITH LOGIN;

4
psql postgresผลการค้นหา:psql: FATAL: role "root" does not exist
TomSawyer

2
psql postgres -U postgres? ขึ้นอยู่กับผู้ใช้ (-U) ที่คุณมี
Meadowlark Bradsher

ขอบคุณ! ฉันพยายามสำรองข้อมูล postgresql ด้วยรูทเนื่องจากฉันไม่รู้รหัสผ่าน postgres
Dika

7

ในพร้อมต์ผู้ใช้โลคัลไม่ใช่พรอมต์ผู้ใช้รูทพิมพ์

sudo -u postgres createuser <local username>

จากนั้นป้อนรหัสผ่านสำหรับผู้ใช้ท้องถิ่น

จากนั้นป้อนคำสั่งก่อนหน้าซึ่งสร้าง "บทบาท 'ชื่อผู้ใช้' ไม่มีอยู่"

ขั้นตอนข้างต้นแก้ไขปัญหาให้ฉันได้ ถ้าไม่ได้โปรดส่งข้อความ terminal สำหรับขั้นตอนข้างต้น



3

การสร้างคลัสเตอร์ DB ด้วยตนเองแก้ไขได้ในกรณีของฉัน

ด้วยเหตุผลบางอย่างเมื่อฉันติดตั้ง postgres "ฐานข้อมูลเริ่มต้น" ไม่ได้ถูกสร้างขึ้น การดำเนินการinitdbได้หลอกลวงสำหรับฉัน

โซลูชันนี้มีให้ในPostgreSQL Wiki - ขั้นตอนแรก :

initdb

โดยทั่วไปการติดตั้ง postgres ไปยังระบบปฏิบัติการของคุณจะสร้าง "initial DB" และเริ่มทำงานเซิร์ฟเวอร์ daemon ของ postgres ถ้าไม่เช่นนั้นคุณจะต้องเรียกใช้ initdb


2

สำหรับผู้ใช้Windows :psql -U postgres

คุณควรเห็นอินเตอร์เฟสบรรทัดคำสั่งเป็น PostgreSQL: postgres=#


0

ทำตามขั้นตอนเหล่านี้และมันจะทำงานให้คุณ:

  1. วิ่ง msfconsole
  2. พิมพ์ db_console
  3. ข้อมูลบางอย่างจะปรากฏให้คุณเลือกข้อมูลที่บอกให้คุณทำ: db_connect user:pass@host:port.../databaseขอโทษฉันจำไม่ได้ แต่มันก็เหมือนที่นี้แล้วแทนที่ผู้ใช้และรหัสผ่านและโฮสต์และฐานข้อมูลด้วยข้อมูลที่รวมอยู่database.ymlในสถานที่ :/usr/share/metasploit-framework/config
  4. แล้วคุณจะได้เห็น. สร้างแคชโมเดลขึ้นใหม่ในพื้นหลัง
  5. พิมพ์ apt-get update && apt-get upgrade หลังจากอัพเดตรีสตาร์ทเทอร์มินัลและ msfconsole สำหรับอาหารกลางวันและใช้งานได้คุณสามารถตรวจสอบได้โดยการพิมพ์msfconsole: msf>db_statusคุณจะเห็นว่ามันเชื่อมต่ออยู่

0

ดัมพ์และกู้คืนด้วย--no-owner --no-privilegesแฟล็ก

เช่น

การถ่ายโอนข้อมูล - pg_dump --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname > /tmp/full.dump

คืนค่า - pg_restore --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname /tmp/full.dump

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