第一次如何配置postgresql?

Posted

技术标签:

【中文标题】第一次如何配置postgresql?【英文标题】:How to configure postgresql for the first time? 【发布时间】:2010-12-01 02:10:20 【问题描述】:

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

createdb: 无法连接到数据库 postgres: FATAL: 用户密码验证失败

createuser 也一样。

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

【问题讨论】:

How do I login and authenticate to Postgresql after a fresh install?的可能重复 这与一年后提出的这个问题非常相似。但是,我相信这个有一个dangerous的主要答案。您应该设置postgres 用户。它是 PostgreSQL 的 SU,它为您打开了针对它的登录攻击的大门。 Create another super-user,并为具有 root 权限的 UNIX 管理员保留锁定的 postgres 【参考方案1】:

在 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

【讨论】:

【参考方案2】:

其他答案对我来说并不完全令人满意。以下是在 Xubuntu 12.04.1 LTS 上适用于 postgresql-9.1 的方法。

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

    sudo -u postgres psql 模板1

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

    使用加密密码“xxxxxxx”更改用户 postgres;

    编辑pg_hba.conf 文件:

    sudo vim /etc/postgresql/9.1/main/pg_hba.conf

    在 postgres 的行中将“peer”改为“md5”:

    本地      所有     postgres     peer md5

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

    重启数据库:

    sudo /etc/init.d/postgresql 重启

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

    创建一个和你同名的用户(要找到它,你可以输入whoami):

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

    这些选项告诉 postgresql 创建一个可以登录的用户,创建数据库,创建新角色,是一个超级用户,并且有一个加密的密码。真正重要的是 -P -E,以便您输入将被加密的密码,以及 -d 以便您可以输入createdb

    注意密码:它会首先询问您两次新密码(针对新用户),重复一次,然后再询问一次 postgres 密码(在步骤 2 中指定的密码)。

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

    本地      所有     所有     peer md5

    重新启动(如第 4 步),并检查您是否可以在没有 -U postgres 的情况下登录:

    psql 模板1

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

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

【讨论】:

这个过程在 Ubuntu 13.10 上也很有效。创建用户时只需记住第 5 步中的 sudo 即可。 在 Ubuntu 14.04 LTS 上也表现出色 作为注释,pg_hba.conf 中的行必须是第一行,否则可能会因为其他规则而被忽略(F21 上的 pgsql 9.3.5)。我花了一些时间才弄清楚这一点,为 postgresql 用户取消注释和更改已经注释掉的行不会简单。 这实际上是个坏建议。你在和 postgres 用户打交道。 ***.com/a/41604969/124486 请将答案更新到 2017 年! PostgreSQL 9.6 和 UBUNTU 16 LTS...没有简单的方法??【参考方案3】:

编辑:警告:请阅读Evan Carroll 发布的答案。看来这个解决方案不安全,不推荐。

这在标准 Ubuntu 14.04 64 位安装中对我有用。

我按照我在http://suite.opengeo.org/4.1/dataadmin/pgGettingStarted/firstconnect.html 中找到的说明进行了少量修改

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

sudo apt-get install postgresql

    使用 postgres 用户运行 psql

sudo –u postgres psql postgres

    为 postgres 用户设置新密码:

\password postgres

    退出 psql

\q

    编辑 /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

    重启 postgreSQL:

sudo service postgresql restart

    创建一个新数据库

sudo –u postgres createdb mytestdb

    再次使用 postgres 用户运行 psql:

psql –U postgres –W

    列出现有数据库(您的新数据库现在应该在那里):

\l

【讨论】:

我投了反对票,因为我认为激活 postgres 用户是个坏主意。 ***.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`

【讨论】:

【参考方案5】:

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

    使用 createuser 和 createdb

    $ sudo -u postgres createuser --superuser $USER
    $ createdb mydatabase
    $ psql -d mydatabase
    

    使用 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用户。

    它通常被操作系统锁定。没有人应该以postgres 的身份“登录”到操作系统。您应该拥有 root 权限才能以 postgres 身份进行身份验证。 它通常不受密码保护并委托给主机操作系统。这是好事。这通常意味着为了以postgres(相当于SQL Server 的SA)的PostgreSQL 身份登录,您必须对底层数据文件具有写访问权限。而且,这意味着无论如何你通常都会造成严重破坏。 通过禁用此功能,您可以消除通过指定超级用户进行暴力攻击的风险。隐藏和掩盖超级用户的名字是有好处的。

【讨论】:

使用第一种方法,用户最终没有权限。我最终使用了这个而不是第一个命令:sudo -u postgres createuser -U postgres -d -e -E -l -P -r -s $(whoami) @FabienSnauwaert -s 使用户成为超级用户。【参考方案6】:

如果你像我一样运行 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

然后我用我的首选端口 5433 编辑了/var/postgres/var-10-local/postgresql.conf

/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

完成!

【讨论】:

【参考方案7】:

只需浏览到您的安装目录并执行此文件“pg_env.bat”,然后转到 bin 文件夹并执行 pgAdmin.exe。毫无疑问,这一定有效!

【讨论】:

【参考方案8】:

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

$ psql -U postgres

然后你就像往常一样创建一个新数据库:

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

这应该可以在不接触pg_hba.conf 的情况下工作。如果您希望能够通过网络使用一些 GUI 工具来执行此操作 - 那么您需要使用 pg_hba.conf

【讨论】:

我正在为我的目录运行 initdb 并存在配置文件的 Windows 上工作。现在 createdb 可以工作,但是当我执行 psql 测试时,我收到消息警告:控制台代码页 (437) 与 Windows 代码页 (1252) 不同 8 位字符可能无法正常工作。有关详细信息,请参阅 psql 参考页“Windows 用户注意事项”。并且所有命令都不起作用。 psql: FATAL: Peer authentication failed for user "postgres" 即使使用 sudo。 完美答案,我不想触及配置文件,这在 Ubuntu 上的 PostgreSQL 10.10 上完美运行。之后您应该能够与psql -d mydatatabase -U myuser 联系。【参考方案9】:

这是我的解决方案:

su root
su postgres
psql

【讨论】:

这在许多情况下都有效,因为许多站点将使用 pg_hba.conf 针对 postgres 系统帐户(对等方法)对 postgres db 用户进行身份验证。然而,成功登录最终将取决于任何特定站点的 pg_hba.conf 的内容。 为我工作。我用sudo bash替换了第一行。 我不明白这有什么帮助,.. 据我了解,这会登录 root 和 postgres,然后运行 ​​psql。到底发生了什么?谢谢!【参考方案10】:

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

【讨论】:

对于 RHEL6.4 和 postgres 8.4,该文件位于 /var/lib/pgsql/data/pg_hba.conf。将ident 更改为trust 用于host(如果您使用的是ssh,则将local)。

以上是关于第一次如何配置postgresql?的主要内容,如果未能解决你的问题,请参考以下文章

Postgresql 12.9如何配置允许远程连接

postgresql_exporter 不工作。如何配置它?

如何在 jmeter 中通过隧道配置 PostgreSQL 数据库

如何配置从 Vanilla Postgresql 9.6 DB 到 AWS RDS Postgresql 的流复制

如何通过standalone.xml 配置将 PostgreSql 连接到 Keycloak

如何在 JavaEE 应用程序中为 PostgreSQL 热备设置配置连接故障转移?