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

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

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

createuser 也一样。

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

【问题讨论】:

标签: linux database postgresql configuration


【解决方案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 的方法。

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

      sudo -u postgres psql 模板1

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

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

    3. 编辑pg_hba.conf 文件:

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

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

      本地      所有     postgres     peer md5

      要知道您正在运行的 postgresql 版本,请在 /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”:

      本地      所有     所有     peer md5

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

      psql 模板1

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

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

    【讨论】:

    • 这个过程在 Ubuntu 13.10 上也很有效。创建用户时只需记住第 5 步中的 sudo 即可。
    • 在 Ubuntu 14.04 LTS 上也表现出色
    • 作为注释,pg_hba.conf 中的行必须是第一行,否则可能会因为其他规则而被忽略(F21 上的 pgsql 9.3.5)。我花了一些时间才弄清楚这一点,为 postgresql 用户取消注释和更改已经注释掉的行不会简单。
    • 这实际上是个坏建议。你在和 postgres 用户打交道。 stackoverflow.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 中找到的说明进行了少量修改

    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

    【讨论】:

    【解决方案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】:

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

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

      【讨论】:

      • 使用第一种方法,用户最终没有权限。我最终使用了这个而不是第一个命令: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)。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-08-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多