第一次如何配置postgresql?


197

我刚安装了postgresql,并在安装过程中指定了密码x。当我尝试执行createdb并指定任何密码时,我收到以下消息:

createdb:无法连接到数据库postgres:严重:用户的密码身份验证失败

相同createuser

我应该如何开始?我可以将自己添加为数据库用户吗?



4
这与一年后提出的问题几乎相同。但是,我相信这是一个危险的主要答案。您应该设置postgres用户。这SU是PostgreSQL的版本,它使您可以针对它进行登录攻击。创建另一个超级用户,并postgres使用root 保留锁定的UNIX管理员。
埃文·卡罗尔

Answers:


328

其他答案对我来说并不完全令人满意。这是在Xubuntu 12.04.1 LTS上用于postgresql-9.1的工具。

  1. 使用用户postgres连接到默认数据库:

    须藤-u postgres psql template1

  2. 设置用户postgres的密码,然后退出psql(Ctrl-D):

    使用加密密码“ xxxxxxx”的ALTER USER postgres;

  3. 编辑pg_hba.conf文件:

    须藤vim /etc/postgresql/9.1/main/pg_hba.conf

    并在与postgres有关的行上将“ peer”更改为“ md5”:

    本地所有      postgres      对等 md5

    要知道您正在运行的Postgresql版本,请在中查找version文件夹/etc/postgresql。另外,您可以使用Nano或其他编辑器代替VIM。

  4. 重新启动数据库:

    sudo /etc/init.d/postgresql重新启动

    (在这里您可以检查它是否适用于psql -U postgres)。

  5. 创建一个与您同名的用户(要找到它,可以键入whoami):

    sudo createuser -U postgres -d -e -E -l -P -r -s <my_name>

    这些选项告诉postgresql创建一个用户,该用户可以登录,创建数据库,创建新角色,是超级用户,并且将具有加密的密码。真正重要的是-P -E,因此要求您键入将被加密的密码,而-d则可以执行createdb

    当心密码:它将首先询问您两次新密码(对于新用户),然后重复一次,然后询问一次postgres密码(在步骤2中指定的密码)。

  6. 再次,编辑pg_hba.conf文件(请参阅上面的步骤3),然后在与“所有”其他用户有关的行上将“ peer”更改为“ md5”:

    本地所有      所有     对等 md5

  7. 重新启动(如步骤4中所示),并检查是否可以在不使用-U postgres的情况下登录:

    psql template1

    请注意,如果执行mere psql,它将失败,因为它将尝试将您连接到与您同名的默认数据库(即whoami)。template1是从头开始的管理数据库。

  8. 现在createdb <dbname>应该可以工作了。


此过程在Ubuntu 13.10上也很好用。只要在创建用户时记住步骤5中的sudo。
David den Haring

2
在Ubuntu 14.04 LTS上也表现出色
ilhnctn

2
请注意,该行pg_hba.conf必须是第一行,否则由于其他规则(F21上的pgsql 9.3.5)而可能被忽略。我花了一些时间弄清楚这一点,对于postgresql用户,取消注释和更改已经注释掉的行将不会简单地完成。
破事2015年

我认为这在PG 9.4中已更改,因为我现在只local all all peer更改了第3点md5。好?
莱奥波德·赫兹(LéoLéopoldHertz)2015年

1
请更新2017年答案!PostgreSQL 9.6和UBUNTU 16 LTS ...没有简单的方法 ??
彼得·克劳斯

55

在Linux下,通常将PostgresQL配置为允许root用户postgres从shell(控制台或ssh)以postgres超级用户身份登录。

$ psql -U postgres

然后,您将照常创建一个新数据库:

CREATE ROLE myuser LOGIN password 'secret';
CREATE DATABASE mydatabase ENCODING 'UTF8' OWNER myuser;

这应该可以正常工作pg_hba.conf。如果您希望能够通过网络使用某些GUI工具来执行此操作-那么您就需要搞混了pg_hba.conf


我在Windows上工作,我为目录运行了initdb并存在配置文件。现在createdb可以正常工作,但是当我执行psql测试时我收到消息警告:控制台代码页(437)与Windows代码页(1252)不同8位字符可能无法正常工作。有关详细信息,请参见psql参考页“ Windows用户注意事项”。并且所有命令均无效。
罗希特·邦加

7
psql: FATAL: Peer authentication failed for user "postgres"即使是须藤。
彼得·克劳斯

完美的答案,我不想接触配置文件,这在基于Ubuntu的PostgreSQL 10.10上完美运行。之后,您应该可以连接psql -d mydatatabase -U myuser
ranu

21

这是我的解决方案:

su root
su postgres
psql

4
在许多情况下,这将起作用,因为许多站点都具有pg_hba.conf来根据postgres系统帐户(对等方法)对postgres db用户进行身份验证。但是,成功登录将最终取决于任何特定站点的pg_hba.conf的内容。
里德·桑德伯格

1
为我工作。我用替换了第一行sudo bash
eje211 2014年

我不知道这有什么帮助,..据我了解,这会登录root和postgres,并运行psql。到底是什么情况?谢谢!
olleh

20

您可以使用两种方法。两者都需要创建一个用户一个数据库。

  1. 使用createuser和createdb

    $ sudo -u postgres createuser --superuser $USER
    $ createdb mydatabase
    $ psql -d mydatabase
  2. 使用SQL管理命令,并通过TCP连接密码

    $ sudo -u postgres psql postgres

    然后,在psql shell中

    CREATE ROLE myuser LOGIN PASSWORD 'mypass';
    CREATE DATABASE mydatabase WITH OWNER = myuser;

    然后您可以登录,

    $ psql -h localhost -d mydatabase -U myuser -p <port>

    如果您不知道该端口,则可以始终以postgres用户身份运行以下命令来获取它:

    SHOW port;

    要么,

    $ grep "port =" /etc/postgresql/*/main/postgresql.conf

旁注:postgres用户

我建议不要修改postgres用户。

  1. 通常是从操作系统锁定的。没有人应该像那样“登录”操作系统postgres。您应该具有身份验证身份的根postgres
  2. 它通常不受密码保护,并委托给主机操作系统。这是一件好事。这通常意味着,要以postgres与SQL Server等效的PostgreSQL 登录SA,必须具有对基础数据文件的写访问权。并且,这意味着您通常无论如何都可以破坏。
  3. 通过禁用此功能,可以消除通过指定的超级用户进行暴力攻击的风险。隐藏和隐藏超级用户的名称具有优势。

使用第一种方法,用户最终将没有特权。我最终使用了该命令,而不是第一个命令:sudo -u postgres createuser -U postgres -d -e -E -l -P -r -s $(whoami)
Fabien Snauwaert '17

@FabienSnauwaert -s使用户成为超级用户。
埃文·卡罗尔

16

编辑:警告:请阅读由埃文·卡洛尔Evan Carroll)发表的答案。似乎此解决方案不安全,不建议使用。

这在标准的Ubuntu 14.04 64位安装中为我工作。

我遵循了在http://suite.opengeo.org/4.1/dataadmin/pgGettingStarted/firstconnect.html中找到的说明,并做了一些小的修改。

  1. 安装postgreSQL(如果尚未安装在您的计算机中):

sudo apt-get install postgresql

  1. 使用postgres用户运行psql

sudo –u postgres psql postgres

  1. 为postgres用户设置一个新密码:

\password postgres

  1. 退出psql

\q

  1. 编辑/etc/postgresql/9.3/main/pg_hba.conf并更改:

#Database administrative login by Unix domain socket local all postgres peer

至:

#Database administrative login by Unix domain socket local all postgres md5

  1. 重新启动postgreSQL:

sudo service postgresql restart

  1. 创建一个新的数据库

sudo –u postgres createdb mytestdb

  1. 再次使用postgres用户运行psql:

psql –U postgres –W

  1. 列出现有数据库(您的新数据库现在应该存在):

\l


1
我之所以投票,是因为我认为激活postgres用户不是一个好主意。stackoverflow.com/a/41604969/124486-
埃文·卡罗尔

4
Note: textdb is the database which you are going to explore with 'alex' user 

root@kalilinux:~# sudo su - postgres 
postgres=#  psql   
postgres=#  create database testdb;
postgres=#  create user alex with password 'alex';
postgres=# GRANT ALL PRIVILEGES ON DATABASE testdb TO alex;`enter code here`

3

您可能需要更新pg_hba.conf文件。该文件控制哪些用户可以从哪些IP地址登录。我认为默认情况下postgres用户已被锁定。


2
对于RHEL6.4和postgres 8.4,文件位于中/var/lib/pgsql/data/pg_hba.conf。更改identtrustfor hostlocal如果使用的是ssh)。
DavidG 2014年

3

如果您像我一样运行macOS,则可能没有postgres用户。

尝试运行时sudo -u postgres psql出现错误sudo: unknown user: postgres

幸运的是,postgres提供了一些可执行文件。

createuser -D /var/postgres/var-10-local --superuser --username=nick
createdb --owner=nick

然后,我可以psql毫无问题地访问。

psql
psql (10.2)
Type "help" for help.

nick=#

如果要从头开始创建新的postgres实例,请按照以下步骤操作。我使用了非默认端口,因此可以运行两个实例。

mkdir /var/postgres/var-10-local
pg_ctl init -D /var/postgres/var-10-local

然后,/var/postgres/var-10-local/postgresql.conf使用首选端口5433进行编辑。

/Applications/Postgres.app/Contents/Versions/10/bin/postgres -D /Users/nick/Library/Application\ Support/Postgres/var-10-local -p 5433

createuser -D /var/postgres/var-10-local --superuser --username=nick --port=5433
createdb --owner=nick --port=5433

做完了!


2

在MacOS中,我按照以下步骤进行操作。

首次安装后,获取系统的用户名。

$ cd ~
$ pwd
/Users/someuser
$ psql -d postgres -U someuser

现在,您已经登录到系统,并且可以创建数据库了。

postgres=# create database mydb;
CREATE DATABASE
postgres=# create user myuser with encrypted password 'pass123';
CREATE ROLE
postgres=# grant all privileges on database mydb to myuser;
GRANT

0

只需浏览到安装目录,然后执行此文件“ pg_env.bat”,因此在bin文件夹中执行pgAdmin.exe。毫无疑问,这必须工作!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.