Ubuntu18.04安装Postgres数据库及初始化配置实操

举报
maijun 发表于 2021/04/14 12:06:36 2021/04/14
【摘要】 上面介绍了在Ubuntu18.04操作系统上,安装Postgres数据库的方法,并针对psql客户端的使用、修改用户名及密码、设置远程访问等进行了介绍,同时介绍了一种在使用JDBC连接Postgres数据库用户名和密码校验失败的案例。

本文简单介绍如何在Ubuntu18.04上面安装Postgres数据库,及如何进行相关的初始化配置,和简单操作方法。

1. Ubuntu安装Postgres

Ubuntu可以使用 apt-get 安装 Postgres 数据库,如下执行命令:

apt-get update
apt-get install postgresql postgresql-client

说明:

(1) 使用原始Ubuntu的源可能下载速度会非常慢,此时可以切换阿里云的源;

(2) 我们在上面命令执行时,可以直接在 root 用户下面执行,上面命令在安装时,会自动创建用户 postgres,此时,我们可以使用 passwd postgres 来修改 postgres 用户的密码,方便我们后续登录;

(3) 安装完成后,系统会创建一个数据库超级用户 postgres,密码为空。

2. 查看Postgres数据库的版本信息

我们可以通过一些命令查看Postgres数据库的版本信息,如下(所有的命令可以参考下面的注释,输出信息参考输出内容):

$ psql --version # 查看客户端的版本号信息
psql (PostgreSQL) 10.16 (Ubuntu 10.16-0ubuntu0.18.04.1)
$
$ psql
psql (10.16 (Ubuntu 10.16-0ubuntu0.18.04.1))
Type "help" for help.

postgres=# select version();  # 查看服务端的详细版本信息
                                                               version
--------------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 10.16 (Ubuntu 10.16-0ubuntu0.18.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0, 64-bit
(1 row)

postgres=# show server_version; # 查看基础版本信息
            server_version
---------------------------------------
 10.16 (Ubuntu 10.16-0ubuntu0.18.04.1)
(1 row)

postgres=# SHOW server_version_num; # 查看仅有数字的版本信息
 server_version_num
--------------------
 100016
(1 row)

postgres=# SELECT current_setting('server_version_num'); # 查看仅有数字的版本信息
 current_setting
-----------------
 100016
(1 row)

postgres=# SELECT current_setting('server_version_num')::integer; # 查看仅有数字的版本信息,并转换为 int 类型(默认为 text 类型)
 current_setting
-----------------
          100016
(1 row)

3. 修改Postgres数据库的默认密码

如前面介绍,刚装好的Postgres数据库的postgres用户的密码默认是空的,所以我们需要修改该密码,使用的方法如下:

su postgres # 切换SQL用户登录
psql -U postgres # 空密码登录
alter user postgres with password '新密码';  #修改postgres 用户密码

执行命令及相关的输出如下:

root@dggphispre13479:/usr# su postgres
$ psql -U postgres
psql (10.16 (Ubuntu 10.16-0ubuntu0.18.04.1))
Type "help" for help.

postgres=# alter user postgres with password 'postgres';
ALTER ROLE
postgres=#

4. psql 的一些简单操作

其他的数据库我也还是用过一些的,但是大体都差不多,但是 psql 区别有点儿大,这里简单介绍少部分实用的命令,更详细的可以自己在进一步搜索:

主要有的一些内容:

(1) \l 查看所有数据库(show databases);

(2) \c dbname 切换数据库(use dbname);

(3) \d 查看所有的表(show tables);

(4) \d+ table 查看表详细信息(describe table)

(5) \q 退出(exit、quit等)

其他关于表的操作,和一般sql类似。

下面是一些实操及输出样例,供参考(下面关于建表操作举例,直接获取自:https://www.runoob.com/postgresql/postgresql-create-table.html):

$ psql -U postgres # 使用postgres用户登录
psql (10.16 (Ubuntu 10.16-0ubuntu0.18.04.1))
Type "help" for help.

postgres=# \l # 查看所有数据库(相当于 show databses)
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(3 rows)

postgres=# \c postgres # 切换数据库(相当于 use postgres)
You are now connected to database "postgres" as user "postgres".
postgres=# \d # 查看当前数据库中的表(相当于 show tables)
Did not find any relations.
postgres=# CREATE TABLE COMPANY(
postgres(#    ID INT PRIMARY KEY     NOT NULL,
postgres(#    NAME           TEXT    NOT NULL,
postgres(#    AGE            INT     NOT NULL,
postgres(#    ADDRESS        CHAR(50),
postgres(#    SALARY         REAL
postgres(# );
CREATE TABLE
postgres=# \d
          List of relations
 Schema |  Name   | Type  |  Owner
--------+---------+-------+----------
 public | company | table | postgres
(1 row)

postgres=# \d+ company # 查看表的字段的详细信息(相当于 describe company)
                                      Table "public.company"
 Column  |     Type      | Collation | Nullable | Default | Storage  | Stats target | Description
---------+---------------+-----------+----------+---------+----------+--------------+-------------
 id      | integer       |           | not null |         | plain    |              |
 name    | text          |           | not null |         | extended |              |
 age     | integer       |           | not null |         | plain    |              |
 address | character(50) |           |          |         | extended |              |
 salary  | real          |           |          |         | plain    |              |
Indexes:
    "company_pkey" PRIMARY KEY, btree (id)

postgres=# \q # 退出(相当于 quit、exit 什么的)

5. 设置Postgres数据库远程访问

下面介绍一下如果修改Postgres数据库,方便远程访问。使用Ubuntu apt-get安装的Postgres数据库,配置文件都位于 /etc/postgresql/{version}/main 下面(version是大版本号,比如我这里装的是10,其他装 9.x 的应该就是 9 或者 9.x,我没有试过)。

(1) 修改 postgresql.conf

在该配置文件中,增加一行(如果原来有下面参数,就修改一下),使Postgres可以接受外部所有的IP的连接请求:

listen_addresses = '*'

(2) 修改 pg_hba.conf

在该配置文件中,增加或者编辑下面信息,配置服务端允许的认证方式(默认Postgres只允许本机通过密码认证登录,修改为上面内容后即可以对任意IP访问进行密码验证):

# TYPE  DATABASE  USER  CIDR-ADDRESS  METHOD
host  all  all 0.0.0.0/0 md5

(3) 重启 postgres 服务

sudo service postgresql restart

然后就可以远程访问Postgres数据库了:

6. JDBC连接校验失败问题

在使用JDBC连接Postgres数据库时,报错如下:

Caused by: java.sql.SQLException: Cannot create PoolableConnectionFactory (FATAL: password authentication failed for user "postgres")
        at org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:669)
        at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:544)
        at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:753)
        at org.sonar.db.profiling.NullConnectionInterceptor.getConnection(NullConnectionInterceptor.java:31)
        at org.sonar.db.profiling.ProfiledDataSource.getConnection(ProfiledDataSource.java:317)
        at org.sonar.db.DefaultDatabase.checkConnection(DefaultDatabase.java:115)
        ... 25 common frames omitted
Caused by: org.postgresql.util.PSQLException: FATAL: password authentication failed for user "postgres"
        at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:613)
        at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:161)
        at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:213)
        at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:51)
        at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:223)
        at org.postgresql.Driver.makeConnection(Driver.java:465)
        at org.postgresql.Driver.connect(Driver.java:264)
        at org.apache.commons.dbcp2.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:55)
        at org.apache.commons.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:355)
        at org.apache.commons.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:115)
        at org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:665)
        ... 30 common frames omitted

如前面的介绍,我数据库使用 psql 和远程连接,都可以正确连接,但是在使用JDBC连接时,报上面的错误(实际上,是在搭建SonarQube web服务时报错)。

这是因为用户认证用户名和密码的方式引起的,Postgres 数据库在安装好时,默认采用md5密码加密认证方式,需要改为trust。

解决方式:修改 pg_hba.conf (位置参考上面 设置远程连接 小节描述),将认证方式从 md5 改成 trust(如下图中trust原来为md5):

7. 总结

上面介绍了在Ubuntu18.04操作系统上,安装Postgres数据库的方法,并针对psql客户端的使用、修改用户名及密码、设置远程访问等进行了介绍。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。