OpenSUSE 安装 PostgreSQL 12

 

自从 MySQL 被 Oracle 收购以后,PostgreSQL 逐渐成为开源关系型数据库的首选。

本文介绍 PostgreSQL 的安装和基本用法,供初次使用者上手。以下内容基于 OpenSUSE 操作系统,其他操作系统实在没有精力兼顾,但是大部分内容应该普遍适用。

安装

chengchao@web1:~:) sudo zypper search postgresql
chengchao@web1:~:) sudo zypper install postgresql12-server
chengchao@web1:~:) sudo systemctl status postgresql.service 
chengchao@web1:~:) sudo systemctl start postgresql.service 

正常情况下,安装完成后,PostgreSQL 服务器会自动在本机的 5432 端口开启。

如果还想安装图形管理界面,可以运行下面命令,但是本文不涉及这方面内容。

chengchao@web1:~:) zypper search pgadmin
Loading repository data...
Warning: Repository 'openSUSE-15.1-Update-Non-Oss' appears to be outdated. Consider using a different mirror or server.
Warning: Repository 'openSUSE-15.1-Update-Oss' appears to be outdated. Consider using a different mirror or server.
Reading installed packages...

S | Name         | Summary                                   | Type
--+--------------+-------------------------------------------+-----------
  | pgadmin4     | Management tool for PostgreSQL            | package
  | pgadmin4-doc | Documentation for pgAdmin4                | package
  | pgadmin4-web | Web package for pgAdmin4                  | package
  | phpPgAdmin   | Administration of PostgreSQL over the web | package
  | phpPgAdmin   | Administration of PostgreSQL over the web | srcpackage
chengchao@web1:~:) sudo zypper install pgadmin4

添加新用户和数据库

初次安装后,默认生成一个名为 postgres 的数据库和一个名为 postgres 的数据库用户。这里需要注意的是,同时还生成了一个名为 postgres 的 Linux 系统用户。

下面,我们使用 postgres 用户,来生成其他用户和新数据库。好几种方法可以达到这个目的,这里介绍两种。

第一种方法,使用PostgreSQL控制台。

首先,新建一个 Linux 新用户,可以取你想要的名字,这里为 dbuser。

sudo adduser dbuser

然后,切换到postgres用户。

sudo su - postgres

下一步,使用psql命令登录PostgreSQL控制台。

postgres@web1:~> psql
psql (12.5)
Type "help" for help.

postgres=# 

这时相当于系统用户 postgres 以同名数据库用户的身份,登录数据库,这是不用输入密码的。如果一切正常,系统提示符会变为 ··postgres=#",表示这时已经进入了数据库控制台。以下的命令都在控制台内完成。

第一件事是使用\password命令,为postgres用户设置一个密码。

postgres=# \password postgres
Enter new password: 
Enter it again: 
postgres=# 

第二件事是创建数据库用户角色 dbuser(刚才创建的是Linux系统用户),并设置密码。

postgres=# DROP ROLE dbuser;
DROP ROLE
postgres=# CREATE ROLE dbuser WITH LOGIN CREATEDB PASSWORD '654321';

第三件事是创建用户数据库,这里为exampledb,并指定所有者为dbuser。

postgres=# CREATE DATABASE exampledb OWNER dbuser;

第四件事是将exampledb数据库的所有权限都赋予dbuser,否则dbuser只能登录控制台,没有任何数据库操作权限。

postgres=# GRANT ALL PRIVILEGES ON DATABASE exampledb to dbuser;

最后,使用 \q 命令退出控制台(也可以直接按ctrl+D)。

postgres=# \q

第二种方法,使用shell命令行。

添加新用户和新数据库,除了在 PostgreSQL 控制台内,还可以在 shell 命令行下完成。这是因为PostgreSQL 提供了命令行程序 createusercreatedb。以新建用户 dbuser2 和数据库exampledb2 为例。

首先,创建数据库用户 dbuser2,并指定其为超级用户。

chengchao@web1:~:) sudo useradd -m dbuser2
chengchao@web1:~:) sudo -u postgres createuser --superuser dbuser2

然后,登录数据库控制台,设置 dbuser2 用户的密码,完成后退出控制台。

chengchao@web1:~:) sudo -u postgres psql
psql (12.5)
Type "help" for help.

postgres=# \password dbuser2
Enter new password: 
Enter it again: 
postgres=# \q

接着,在 shell 命令行下,创建数据库 exampledb2,并指定所有者为 dbuser2。

chengchao@web1:~:) sudo -u postgres createdb -O dbuser2 exampledb2

添加新用户和新数据库以后,就要以新用户的名义登录数据库,这时使用的是 psql 命令

chengchao@web1:~:) sudo su - dbuser2
dbuser2@web1:~> psql -d exampledb2
psql (12.5)
Type "help" for help.

exampledb2=# create table tb_user (id int, name varchar(20));
CREATE TABLE
exampledb2=# insert into tb_user values (1, 'chengchao');
INSERT 0 1
exampledb2=# select * from tb_user ;
 id |   name    
----+-----------
  1 | chengchao
(1 row)

exampledb2=# 

Java

增加 pom 的依赖

        <!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.3.1</version>
        </dependency>

写个简单的代码测一下:


    /**
     * 修改配置 pg_hba.conf 添加:
     * # IPv4 local connections:
     * host  all  all  0.0.0.0/0  md5
     * 修改配置 postgresql.conf 添加:
     * listen_addresses = '0.0.0.0'
     *
     * @param args
     * @throws ClassNotFoundException
     */
    public static void main(String[] args) throws ClassNotFoundException {
        Class.forName("org.postgresql.Driver");
        String sql = "select * from tb_user";
        try (Connection conn = DriverManager
                    .getConnection("jdbc:postgresql://47.114.98.28:5432/exampledb2",
                            "dbuser2", "654321");
            Statement stmt = conn.createStatement();
            ResultSet resultSet = stmt.executeQuery(sql) ) {

            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                System.out.println("id : "+ id +", name: "+ name);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Go

待补充。

so so .

参考

EOF