如何首次配置postgresql?

时间:2009-09-24 13:06:18

标签: linux database postgresql configuration

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

  

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

createuser相同。

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

10 个答案:

答案 0 :(得分:301)

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

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

      

    sudo -u postgres psql template1

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

      

    ALTER USER postgres加密密码'xxxxxxx';

  3. 编辑pg_hba.conf文件:

      

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

    在关于postgres的行上将“peer”改为“md5”:

      

    本地所有 postgres peer md5

  4. 重启数据库:

      

    sudo /etc/init.d/postgresql restart

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

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

      

    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”:

      

    本地所有所有 peer md5

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

      

    psql template1

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

  8. 现在createdb <dbname>应该有效。

答案 1 :(得分:51)

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

$ psql -U postgres

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

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

这应该无需触及pg_hba.conf即可。如果你想通过网络使用一些GUI工具来做到这一点 - 那么你需要弄乱pg_hba.conf

答案 2 :(得分:19)

这是我的解决方案:

su root
su postgres
psql

答案 3 :(得分:13)

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

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

我按照http://suite.opengeo.org/4.1/dataadmin/pgGettingStarted/firstconnect.html

中的说明进行了少量修改
  1. 安装postgreSQL(如果尚未安装在您的计算机中):
  2. sudo apt-get install postgresql

    1. 使用postgres用户
    2. 运行 psql

      sudo –u postgres psql postgres

      1. 为postgres用户设置新密码:
      2. \password postgres

        1. 退出psql
        2. \q

          1. 修改 /etc/postgresql/9.3/main/pg_hba.conf 并更改:
          2. #Database administrative login by Unix domain socket local all postgres peer

            致:

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

            1. 重新启动postgreSQL:
            2. sudo service postgresql restart

              1. 创建新数据库
              2. sudo –u postgres createdb mytestdb

                1. 再次使用postgres用户运行psql:
                2. psql –U postgres –W

                  1. 列出现有数据库(您的新数据库现在应该在那里):
                  2. \l

答案 4 :(得分:11)

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

  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
    
  3. 旁注:postgres用户

    我建议修改postgres用户。

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

答案 5 :(得分:3)

在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

答案 6 :(得分:2)

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

答案 7 :(得分:2)

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

完成!

答案 8 :(得分:1)

is_default

答案 9 :(得分:0)

只需浏览到您的安装目录并执行此文件&#34; pg_env.bat&#34;,然后转到bin文件夹并执行pgAdmin.exe。毫无疑问,这必须奏效!