关于linux:如何首次配置postgresql?

How to configure postgresql for the first time?

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

createdb: could not connect to database postgres: FATAL: password authentication failed for user

createuser也是如此。

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


其他答案对我来说并不完全令人满意。这是在Xubuntu 12.04.1 LTS上对postgresql-9.1有效的方法。

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

    sudo -u postgres psql template1

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

    ALTER USER postgres with encrypted password 'xxxxxxx';

  • 编辑pg_hba.conf文件:

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

    关于postgres的行改为"peer"到"md5":

    local      all     postgres     peer md5

  • 重启数据库:

    sudo /etc/init.d/postgresql restart

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

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

    createuser -U postgres -d -e -E -l -P -r -s

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

    小心密码:它会首先询问您两次新密码(对于新用户),重复,然后再次发出postgres密码(步骤2中指定的密码)。

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

    local      all     all     peer md5

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

    psql template1

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

  • 现在createdb 应该可行。


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

    1
    $ psql -U postgres

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

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

    这应该可以在不触及pg_hba.conf的情况下工作。如果你想通过网络使用一些GUI工具来做到这一点 - 那么你需要弄乱pg_hba.conf


    这是我的解决方案:

    1
    2
    3
    su root
    su postgres
    psql


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

  • 使用createuser和createdb,

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

    1
    $ sudo -u postgres psql postgres

    然后,在psql shell中

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

    然后你可以登录,

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

    如果你不知道端口,你可以通过运行以下命令来获得它,作为postgres用户,

    1
    SHOW port;

    要么,

    1
    $ grep"port =" /etc/postgresql/*/main/postgresql.conf
  • 旁注:postgres用户

    我建议不要修改postgres用户。

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

  • 编辑:警告:请阅读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


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

    尝试运行sudo -u postgres psql时,我收到错误sudo: unknown user: postgres

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

    1
    2
    createuser -D /var/postgres/var-10-LOCAL --superuser --username=nick
    createdb --owner=nick

    然后我能够毫无问题地访问psql

    1
    2
    3
    4
    5
    psql
    psql (10.2)
    TYPE"help" FOR help.

    nick=#

    如果你是从头开始创建一个新的postgres实例,这是我采取的步骤。我使用了非默认端口,因此我可以运行两个实例。

    1
    2
    mkdir /var/postgres/var-10-LOCAL
    pg_ctl init -D /var/postgres/var-10-LOCAL

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

    1
    2
    3
    4
    /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

    完成!


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


    1
    2
    3
    4
    5
    6
    7
    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`

    只需浏览到您的安装目录并执行此文件"pg_env.bat",然后进入bin文件夹并执行pgAdmin.exe。这必须毫无疑问!