openEuler23.09安装Postgresql16.3

openEuler23.09安装Postgresql16.3,基于源代码编译安装PostgreSQL的基本步骤

一、PostgreSQL数据库服务环境搭建

操作系统版本
openEuler-23.09-x86_64-dvd.iso ,安装步骤此处省略。。。

最常用且直接的方法来查看openEuler的版本号是查看/etc/os-release文件

[root@openEuler ~]$ cat /etc/os-release
NAME="openEuler"
VERSION="23.09"
ID="openEuler"
VERSION_ID="23.09"
PRETTY_NAME="openEuler 23.09"
ANSI_COLOR="0;31"

1.1、下载及上传Postgresql16.3源代码包

Postgresql16.3 下载地址
https://www.postgresql.org/ftp/source/v16.3/
在这里插入图片描述

1.2、关闭防火墙

systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service

1.3、关闭SELINUX防火墙

vi /etc/selinux/config

将内容
SELINUX=enforcing
更改为
SELINUX=disabled

1.4、安装依赖包

mount /dev/cdrom /mnt

yum install -y cmake make gcc zlib gcc-c++ perl readline readline-devel zlib zlib-devel perl python36 tcl openssl ncurses-devel openldap pam

1.5、创建用户及属组

groupadd -g 61600 pgsql
useradd -u 61600 -g pgsql pgsql
passwd pgsql

1.6、创建目录及授权

mkdir -p /postgresql/pgdata
mkdir -p /postgresql/backup
mkdir -p /postgresql/pgsql16
mkdir -p /postgresql/soft

chown -R pgsql:pgsql /postgresql
chmod -R 775 /postgresql

1.7、解压数据库软件

su - pgsql
cd /postgresql/soft
tar zxvf postgresql-16.3.tar.gz
cd postgresql-16.3

2、从源代码编译和安装PostgreSQL

2.1、编辑环境变量

vi ~/.bash_profile

export LANG=en_US.UTF8
export PGPORT=5432  
export PGDATA=/postgresql/pgdata
export PGHOME=/postgresql/pgsql16
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH  
export PATH=$PGHOME/bin:$PATH:.  
export DATE=`date +"%Y%m%d%H%M"`  
export MANPATH=$PGHOME/share/man:$MANPATH  
export PGHOST=$PGDATA  
export PGUSER=postgres  
export PGDATABASE=postgres

alias psql="rlwrap psql"

source ~/.bash_profile

2.2、从源代码编译和安装PostgreSQL

./configure --prefix=/postgresql/pgsql16 --without-readline
make
make install

1. ./configure --prefix=/postgresql/pgsql16 --without-readline
   
     ./configure 是一个脚本,用于检查您的系统以确认是否有编译PostgreSQL所需的所有库和工具。

     --prefix=/postgresql/pgsql16 指定了PostgreSQL的安装目录。这意味着当您执行 make install 时,PostgreSQL的文件将被安装到 /postgresql/pgsql16 目录下。

     --without-readline 是一个选项,告诉 configure 脚本不要包含 readline 库的支持。readline 是一个库,它允许用户通过命令行界面(CLI)编辑和重新调用命令历史。在某些情况下,为了减小安装大小或避免与系统中的其他库冲突,您可能想要禁用它。

2. make
     一旦 ./configure 脚本成功运行,它将生成一个 Makefile 文件,该文件包含了构建PostgreSQL所需的所有命令和设置。
     make 命令会读取这个 Makefile 并开始编译源代码。编译过程可能会花费一些时间,具体取决于您的系统性能。

3. make installmake 命令成功完成后,您可以使用 make install 命令将编译好的PostgreSQL文件安装到之前通过 --prefix 选项指定的目录中(在这个例子中是 /postgresql/pgsql16)。
     这个命令还会安装必要的脚本、配置文件和其他文件,以便您可以轻松地启动、停止和管理PostgreSQL服务器。

2.3、初始化数据库

su - pgsql

/postgresql/pgsql16/bin/initdb -D /postgresql/pgdata -E UTF8 --locale=en_US.utf8 -U postgres

-- 执行命令输入的提示。。。。
The database cluster will be initialized with locale "en_US.utf8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /postgresql/pgdata ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Shanghai
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

initdb: warning: enabling "trust" authentication for local connections
initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

    /postgresql/pgsql16/bin/pg_ctl -D /postgresql/pgdata -l logfile start

-- 提示启动数据库服务

[pgsql@openEuler:/postgresql/soft/postgresql-16.3]$/postgresql/pgsql16/bin/pg_ctl -D /postgresql/pgdata -l logfile start
waiting for server to start.... done
server started

-- 检查postgresql 状态
[pgsql@openEuler:/postgresql/soft/postgresql-16.3]$pg_ctl status
pg_ctl: server is running (PID: 12282)
/postgresql/pgsql16/bin/postgres "-D" "/postgresql/pgdata"

这条命令是用于初始化一个新的 PostgreSQL 数据库集群的。这里,我会详细解释这条命令中的每个部分:

  1. /postgresql/pgsql16/bin/initdb:

    • 这是 initdb 命令的完整路径。initdb 是 PostgreSQL 提供的一个工具,用于创建一个新的数据库集群。
    • /postgresql/pgsql16/bin/ 是这个 initdb 命令所在的目录。这通常意味着一个安装在 /postgresql/pgsql16 下的 PostgreSQL 16 版本。
  2. -D /postgresql/pgdata:

    • -D 选项用于指定数据目录的路径。
    • /postgresql/pgdata 是你希望新数据库集群的数据文件存放的位置。
  3. -E UTF8:

    • -E 选项用于设置新数据库的默认字符编码。
    • UTF8 是一种广泛使用的字符编码,可以表示几乎世界上所有的字符。
  4. –locale=en_US.utf8:

    • –locale 选项用于设置新数据库的区域设置。
    • en_US.utf8 表示使用美国英语的区域设置,并使用 UTF-8 字符编码。
  5. -U postgres:

    • -U 选项用于指定数据库超级用户的名称。
    • 在这里,超级用户的名称被设置为 postgres,这是 PostgreSQL 的默认超级用户名称。

执行这条命令后,initdb 会创建一个新的数据库集群在 /postgresql/pgdata 目录下,并配置为使用 UTF8 字符编码和美国英语的区域设置。之后,你可以使用 pg_ctl 或其他 PostgreSQL 工具(如 postgres 命令行工具)来启动这个数据库集群。

注意:在执行这条命令之前,你可能需要确保 /postgresql/pgdata 目录不存在或为空,因为 initdb 不会覆盖现有的数据。同时,你也需要确保有适当的权限来写入 /postgresql/pgdata 目录。

2.3、编辑postgresql.conf

vi /postgresql/pgdata/postgresql.conf

listen_addresses = '*'
port = 5432        
max_connections = 512  

#logging_collector = off ===>>logging_collector = on
#log_directory = 'log' ===>>log_directory = 'pg_log'
#log_truncate_on_rotation = off ===>> log_truncate_on_rotation = on
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' ===>> log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
shared_buffers = 2048MB  # 默认是 128MB 
max_wal_size = 1GB       
min_wal_size = 256MB     # 默认是 80MB 

2.4、编辑pg_hba.conf

vi /postgresql/pgdata/pg_hba.conf
在IP v4下增加

host    all      all     0.0.0.0/0      md5

配置 PostgreSQL 的访问控制。这行配置的含义如下:

  • host: 表示这是一个基于主机的认证方法。
  • all: 第一个 all 表示允许所有数据库被访问。
  • all: 第二个 all 表示允许所有用户进行认证。
  • 0.0.0.0/0: 这是一个 CIDR 地址,表示允许来自任何 IP 地址的连接。这通常用于测试或内部网络,但在生产环境中可能会带来安全风险。
  • md5: 表示使用 MD5 加密的密码进行认证。

这条配置行允许来自任何 IP 地址的任何用户连接到 PostgreSQL 数据库集群上的任何数据库,并使用 MD5 加密的密码进行认证。

注意:在生产环境中,这样的配置是非常不安全的,因为它允许任何人连接到你的数据库,只要他们知道正确的用户名和密码。你应该根据你的具体需求和安全策略来限制哪些用户可以从哪些 IP 地址访问哪些数据库。

编辑完 pg_hba.conf 文件后,你需要重启 PostgreSQL 服务以使更改生效。

pg_ctl stop

pg_ctl start

-- or 
/postgresql/pgsql16/bin/pg_ctl -D /postgresql/pgdata stop

/postgresql/pgsql16/bin/pg_ctl -D /postgresql/pgdata start

3、数据库级别配置及检查

3.1、登陆检查

psql -h 127.0.0.1 -p 5432
=======
查看  
\db+			List of tablespaces
\l				List of databases
\du+			List of roles
postgres=# select version();
                                                  version                                                  
-----------------------------------------------------------------------------------------------------------
 PostgreSQL 16.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 12.3.1 (openEuler 12.3.1-16.oe2309), 64-bit
(1 row)

postgres=# \l
                                                      List of databases
   Name    |  Owner   | Encoding | Locale Provider |  Collate   |   Ctype    | ICU Locale | ICU Rules |   Access privileges   
-----------+----------+----------+-----------------+------------+------------+------------+-----------+-----------------------
 postgres  | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | 
 template0 | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =c/postgres          +
           |          |          |                 |            |            |            |           | postgres=CTc/postgres
 template1 | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =c/postgres          +
           |          |          |                 |            |            |            |           | postgres=CTc/postgres
(3 rows)

postgres=# \db+
                                  List of tablespaces
    Name    |  Owner   | Location | Access privileges | Options |  Size  | Description 
------------+----------+----------+-------------------+---------+--------+-------------
 pg_default | postgres |          |                   |         | 22 MB  | 
 pg_global  | postgres |          |                   |         | 565 kB | 
(2 rows)

postgres=# \du+
                                    List of roles
 Role name |                         Attributes                         | Description 
-----------+------------------------------------------------------------+-------------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | 

3.2、修改postgres密码

postgres=# alter user postgres with password 'Rootroot@2024';
ALTER ROLE

3.3、创建用户及设置拥有某个数据库上的所有权限

3.3.1、创建用户

这个命令创建了一个名为pgdba_u1的用户,并为其设置了密码pgUps@2024。同时,由于NOCREATEDB选项,这个用户将没有权限创建新的数据库。

create user pgdba_u1 with password 'pgUps@2024' nocreatedb;

3.3.2、创建数据库并设置pgdba_u1为其拥有者

创建了一个名为pgdb01的数据库,并设置pgdba_u1为其拥有者

create database pgdb01 with owner=pgdba_u1;

3.3.3、授予用户所有权限

GRANT ALL PRIVILEGES ON DATABASE pgdb01 to pgdba_u1;

由于pgdba_u1已经是pgdb01的拥有者,默认已经拥有这个数据库上的所有权限。这个GRANT语句实际上在这种情况下是多余的。但是,如果您以后将其他用户设置为拥有者,或者出于某种原因需要明确授予权限,那么这个命令是有用的。

3.3.4、将用户提升为超级用户

ALTER ROLE pgdba_u1 WITH SUPERUSER;

这个命令将pgdba_u1用户提升为超级用户。这意味着该用户可以执行任何操作,包括创建和删除数据库、用户和角色等。

这通常是一个敏感的操作,因为超级用户具有对数据库系统的完全控制权。在生产环境中,应该谨慎授予超级用户权限,并确保只有必要的人员具有这些权限。

3.4、用户pgdba_u1登陆创建测试表及查看相关信息

[pgsql@openEuler:/postgresql/soft/postgresql-16.3]$psql -h 192.168.80.239 -p 5432 -U pgdba_u1 -d pgdb01
Password for user pgdba_u1: 
psql (16.3)
Type "help" for help.

pgdb01=# \l
                                                      List of databases
   Name    |  Owner   | Encoding | Locale Provider |  Collate   |   Ctype    | ICU Locale | ICU Rules |   Access privileges   
-----------+----------+----------+-----------------+------------+------------+------------+-----------+-----------------------
 pgdb01    | pgdba_u1 | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =Tc/pgdba_u1         +
           |          |          |                 |            |            |            |           | pgdba_u1=CTc/pgdba_u1
 postgres  | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | 
 template0 | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =c/postgres          +
           |          |          |                 |            |            |            |           | postgres=CTc/postgres
 template1 | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =c/postgres          +
           |          |          |                 |            |            |            |           | postgres=CTc/postgres
(4 rows)

pgdb01=# select rolname,rolpassword from pg_authid;
           rolname           |                                                              rolpassword                                                              
-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------
 pg_database_owner           | 
 pg_read_all_data            | 
 pg_write_all_data           | 
 pg_monitor                  | 
 pg_read_all_settings        | 
 pg_read_all_stats           | 
 pg_stat_scan_tables         | 
 pg_read_server_files        | 
 pg_write_server_files       | 
 pg_execute_server_program   | 
 pg_signal_backend           | 
 pg_checkpoint               | 
 pg_use_reserved_connections | 
 pg_create_subscription      | 
 postgres                    | SCRAM-SHA-256$4096:4xevb/JS9Chmb3wI0JzBLA==$GbYrz3EO1JLuj2rszPFhLztLzpYlMMr3YaEihl4wOKM=:FfC3v/RwnmsXBIeDQ/DUlrcxSHBs51vOA2a9gXgHyR8=
 pgdba_u1                    | SCRAM-SHA-256$4096:yMyYUPCwuTttLo+6GRUXeQ==$O/e9mimxth+JCmfNw+YeYd+R/Cnm2Prp6gnnhVMuqfE=:RA3PWeVmQa7lk5L3UWZvMMJUP0DDAeCTttNHp1n2wbA=
(16 rows)

pgdb01=# create table t_testpg (name varchar(50));
CREATE TABLE
pgdb01=# insert into t_testpg values('PostgreSQL12');
INSERT 0 1
pgdb01=# insert into t_testpg values('PostgreSQL13');
INSERT 0 1
pgdb01=# insert into t_testpg values('PostgreSQL14');
INSERT 0 1
pgdb01=# insert into t_testpg values('PostgreSQL15');
INSERT 0 1
pgdb01=# insert into t_testpg values('PostgreSQL16');
INSERT 0 1
pgdb01=# select * from t_testpg;
     name     
--------------
 PostgreSQL12
 PostgreSQL13
 PostgreSQL14
 PostgreSQL15
 PostgreSQL16
(5 rows)

pgdb01=# \dt t_testpg 
          List of relations
 Schema |   Name   | Type  |  Owner   
--------+----------+-------+----------
 public | t_testpg | table | pgdba_u1
(1 row)

pgdb01=# \du+
                                    List of roles
 Role name |                         Attributes                         | Description 
-----------+------------------------------------------------------------+-------------
 pgdba_u1  | Superuser                                                  | 
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | 

3.5、给表和表字段添加备注

pgdb01=# comment on table t_testpg is 'the first table of openEluer os for postgresql';
COMMENT

pgdb01=# comment on column t_testpg.name is 'information name of value';
COMMENT
pgdb01=# 
pgdb01=# \dt t_testpg 
          List of relations
 Schema |   Name   | Type  |  Owner   
--------+----------+-------+----------
 public | t_testpg | table | pgdba_u1
(1 row)

pgdb01=# \dt+ t_testpg 
                                                        List of relations
 Schema |   Name   | Type  |  Owner   | Persistence | Access method |    Size    |                  Description                   
--------+----------+-------+----------+-------------+---------------+------------+------------------------------------------------
 public | t_testpg | table | pgdba_u1 | permanent   | heap          | 8192 bytes | the first table of openEluer os for postgresql
(1 row)

pgdb01=# \d+ t_testpg 
                                                       Table "public.t_testpg"
 Column |         Type          | Collation | Nullable | Default | Storage  | Compression | Stats target |        Description        
--------+-----------------------+-----------+----------+---------+----------+-------------+--------------+---------------------------
 name   | character varying(50) |           |          |         | extended |             |              | information name of value
Access method: heap
  • 35
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Scikit-opt是Python中一个用于求解优化问题的库,其中包含了求解旅行商问题的算法。旅行商问题(TSP)是一个经典的组合优化问题,它的目标是在给定的一组城市和城市之间的距离矩阵下,找到一条最短的路径,使得每个城市都被恰好访问一次,最后回到起点城市。 在Scikit-opt中,可以使用遗传算法、模拟退火、蚁群优化等算法来求解TSP问题。以下是使用遗传算法求解TSP问题的示例代码: ```python from sko.GA import GA_TSP import numpy as np # 城市坐标 coordinates = np.array([[16.47, 96.10], [16.47, 94.44], [20.09, 92.54], [22.39, 93.37], [25.23, 97.24], [22.00, 96.05], [20.47, 97.02], [17.20, 96.29], [16.30, 97.38], [14.05, 98.12], [16.53, 97.38], [21.52, 95.59], [19.41, 97.13], [20.09, 94.55], [22.55, 95.09], [24.38, 97.03], [25.23, 98.12], [25.53, 97.24], [22.00, 94.10], [24.05, 95.10], [23.09, 96.09], [25.23, 96.08], [24.38, 94.03], [22.53, 93.09], [20.47, 93.48]]) # 城市距离矩阵 distance_matrix = np.zeros((len(coordinates), len(coordinates))) for i in range(len(coordinates)): for j in range(len(coordinates)): distance_matrix[i][j] = np.sqrt(np.sum(np.square(coordinates[i] - coordinates[j]))) # 定义TSP问题的适应度函数 def tsp_func(solution): return sum([distance_matrix[solution[i-1]][solution[i]] for i in range(len(solution))]) # 定义遗传算法对象 ga_tsp = GA_TSP(func=tsp_func, n_dim=len(coordinates), size_pop=50, max_iter=500, prob_mut=0.1, prob_crossover=0.9) # 运行遗传算法求解TSP问题 best_solution, best_fitness = ga_tsp.run() # 输出最优解和最优适应度值 print('最优解:', best_solution, '最优适应度值:', best_fitness) ``` 在上面的代码中,我们首先定义了一组城市的坐标和城市之间的距离矩阵。然后定义了TSP问题的适应度函数,它的返回值是从起点出发,经过所有城市一次后回到起点的路径长度。接着创建了一个GA_TSP对象,并设置了算法参数。最后运行遗传算法来求解TSP问题,并输出最优解和最优适应度值。 需要注意的是,这里的遗传算法只是其中一种求解TSP问题的算法,Scikit-opt中还包含了其他优化算法可以用来求解TSP问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值