Ubuntu18.04安装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客户端的使用、修改用户名及密码、设置远程访问等进行了介绍。
- 点赞
- 收藏
- 关注作者
评论(0)