PostgreSQL错误:致命:角色“用户名”不存在

时间:2012-08-12 03:00:45

标签: postgresql authentication

我正在设置我的PostgreSQL 9.1。我无法对PostgreSQL做任何事情:不能createdb,不能createuser;所有操作都返回错误消息

Fatal: role h9uest does not exist

h9uest是我的帐户名,我sudo apt-get install PostgreSQL 9.1在此帐户下 root帐户仍然存在类似的错误。

18 个答案:

答案 0 :(得分:662)

使用操作系统用户 postgres创建数据库 - 只要您尚未设置具有相应权限的数据库角色您的操作系统用户名相同(在您的情况下为h9uest):

sudo -u postgres -i

根据建议herehere

然后再试一次。完成操作系统用户exit后输入postgres

使用createuser执行postgres作为sudo的单个命令,例如另一个答案中的demonstrated by drees

重点是使用与同名数据库角色匹配的操作系统用户通过ident authentication授予访问权限。 postgres是初始化数据库集群的默认操作系统用户。 The manual:

  

为了引导数据库系统,一个刚刚初始化的   系统始终包含一个预定义角色。这个角色永远是一个   “超级用户”,默认情况下(除非在运行initdb时更改)   将与初始化的操作系统用户具有相同的名称   数据库集群。通常,此角色将命名为postgres。   为了创建更多角色,您首先必须以此身份进行连接   最初的角色。

我听说过使用非标准用户名或操作系统用户不存在的奇怪设置。你需要在那里调整你的策略。

阅读手册中的database rolesclient authentication

答案 1 :(得分:253)

在尝试了许多其他人的解决方案后,但没有成功,这个答案终于帮助了我。

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

简而言之,正在运行

sudo -u postgres createuser owning_user

创建一个名为owning_user的角色(在本例中为h9uest)。之后,您可以在您设置的任何帐户名下从终端运行rake db:create,而无需进入postgres环境。

答案 2 :(得分:115)

sudo su - postgres

psql template1

在pgsql上创建角色,权限为“超级用户”

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;

答案 3 :(得分:74)

使用apt-get安装postgres不会创建用户角色或数据库。

为您的个人用户帐户创建超级用户角色和数据库:

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

答案 4 :(得分:64)

这对我有用:

psql -h localhost -U postgres

答案 5 :(得分:9)

工作方法,

  1. vi /etc/postgresql/9.3/main/pg_hba.conf
  2. local all postgres peer 此处将同行更改为信任
  3. 重新启动,sudo service postgresql restart

  4. 现在尝试,psql -U postgres

答案 6 :(得分:6)

我在macOS上安装它并且必须:

cd /Applications/Postgres.app/Contents/Versions/9.5/bin
createuser -U postgres -s YOURUSERNAME
createdb YOURUSERNAME

以下是来源:https://github.com/PostgresApp/PostgresApp/issues/313#issuecomment-192461641

答案 7 :(得分:5)

在本地用户提示符中,不是root用户提示符,键入

sudo -u postgres createuser <local username>

然后输入本地用户的密码。

然后输入上一个生成&#34; role&#39; username&#39;不存在。&#34;

以上步骤解决了我的问题。 如果没有,请发送以上步骤的终端消息。

答案 8 :(得分:2)

对于版本 Postgres 9.5 ,请使用以下命令:

psql -h localhost -U postgres

希望这会有所帮助。

答案 9 :(得分:1)

按照以下步骤进行操作:

  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&amp;&amp;更新后的apt-get升级重新启动终端和午餐msfconsole,它可以通过输入msfconsole: msf>db_status来查看它是否已连接。

答案 10 :(得分:1)

手动创建数据库集群已解决了我的情况。

由于某种原因,当我安装postgres时,未创建“初始数据库”。执行initdb对我有用。

the PostgreSQL Wiki - First steps中提供了此解决方案:

  

initdb

     

通常将postgres安装到您的操作系统会创建一个“初始DB”,并启动postgres服务器守护程序运行。如果没有,那么您需要run initdb

答案 11 :(得分:0)

对于 Windows 用户:psql -U postgres

您应该看到PostgreSQL的命令行界面:postgres=#

答案 12 :(得分:0)

psql postgres

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

答案 13 :(得分:0)

使用loadBoundariesFromGeoJson(map){ let geo_json_url ='https://raw.githubusercontent.com/matej-pavla/Google- Maps-Examples/master/BoundariesExample/geojsons/us.states.geo.json'; this.initializeDataLayer(map); this.http.get(geo_json_url).subscribe((data:any)=>{ if(data.type == "FeatureCollection"){ //we have a collection of boundaries in geojson format if(data.features){ for(let i = 0; i < data.features.length; i++){ let boundary_id = i + 1; let new_boundary : any ={}; if(!data.features[i].properties) data.features[i].properties = {}; data.features[i].properties.boundary_id = boundary_id; //we will use this id to identify boundary later when clicking on it data.features[i].properties.title = 'Hello'; data.features[i].properties.icon = 'http://maps.google.com/mapfiles/ms/micons/blue.png'; this.data_layer.addGeoJson(data.features[i], {idPropertyName: 'boundary_id'}); new_boundary.feature = this.data_layer.getFeatureById(boundary_id); if(data.features[i].properties.name) new_boundary.name = data.features[i].properties.name; if(data.features[i].properties.NAME) new_boundary.name = data.features[i].properties.NAME; this.my_boundaries[boundary_id] = new_boundary; if(this.my_boundaries[boundary_id]){ //just an example, that you can change styles of individual boundary // console.log("Data layers:",this.data_layer); this.data_layer.overrideStyle(this.my_boundaries[boundary_id].feature, { fillColor: 'black', fillOpacity: 0.9, strokeColor:'white', zIndex:-1000 }); } } } } }) } initializeDataLayer(map){ if(this.data_layer){ this.data_layer.forEach(function(feature) { this.data_layer.remove(feature); }); this.data_layer = null; } this.data_layer = new google.maps.Data({map: map}); //initialize data layer which contains the boundaries. It's possible to have multiple data layers on one map this.data_layer.setStyle({ //using set style we can set styles for all boundaries at once fillColor: 'white', strokeWeight: 1, fillOpacity: 0.1 }); } 标志转储和还原

例如

转储-Sub FilterDate() Dim N As Long, r As Range With Sheets("Dates") N = .Cells(Rows.Count, "A").End(xlUp).Row ReDim ary(1 To N) For i = 1 To N ary(i) = .Cells(i, 1) Next i End With Range("A1:F4124").AutoFilter Sheets("Tableau_TxtDateCahiersGI").Range("$A$1:$F$4124").AutoFilter Field:=2, Criteria1:=ary, Operator:=xlFilterValues End Sub

还原---no-owner --no-privileges

答案 14 :(得分:0)

将端口从5432更改为5433如此简单,对我来说就是成功。

答案 15 :(得分:0)

按照以下步骤让 postgres 工作。

  1. 在您的终端中,使用以下命令找到 Application Support 文件夹。 /Users/[用户名]/library/application support
  2. 删除应用程序 Postgres。
  3. 重新安装应用程序,它应该可以正常工作。

答案 16 :(得分:0)

我使用 docker-compose 进行了健康检查。

healthcheck:
  test: ['CMD-SHELL', 'pg_isready']
  interval: 5s
  timeout: 5s
  retries: 5

如果您也有更改用户:

healthcheck:
  test: ['CMD-SHELL', 'pg_isready -U postgres'] # <<<---
  interval: 5s
  timeout: 5s
  retries: 5

答案 17 :(得分:-4)

卸载所有内容并保留Postgres.app:

brew cask uninstall postgres
brew uninstall postgres
brew cask install postgres
rm -rf /Applications/Postgres93.app/
# shutdown any postgres instance
# open postgres.app -> "Initialize"

我想要PostgreSQL 9.6