数据库应用:CentOS 7离线安装PostgreSQL

目录

一、理论

1.PostgreSQL

2.PostgreSQL离线安装

3.PostgreSQL初始化

4.PostgreSQL登录操作

二、实验

1.CentOS 7离线安装PostgreSQL

 2.登录PostgreSQL

3.Navicat连接PostgreSQL

三、总结

 


 

 

 

一、理论

1.PostgreSQL

(1)简介

PostgreSQL 是一个功能强大的开源对象关系数据库管理系统(ORDBMS), 用于安全的存 储数据,允许在处理请求时检索它们,是跨平台的,可以在日常的大部分操作系统运行。

(2)特点

①跨平台,支持所有主要操作系统
②支持文本、图像、声音和视频,并包括用于C/C++ 、Perl、Java、Python、Ruby、
Tcl和开放数据库连接(ODBC)的编程接口
③支持Sql许多功能 如:复杂Sql查询、Sql子选择、外键、触发器、视图、事务、
多进程并发控制(MVCC),流式复制(9.0)、热备(9.0)
④表可以设置为从“父”表继承其特征(9.x版本)。
⑤可以安装多个扩展,添加附加功能。
 

(3)软 件

① PSQL : 是一个命令行工具,也是管理PostgreSQL的主要工具;

② pgAdmin : 是PostgreSQL的免费开源图形用户界面管理工具;

③ pgFouine : 是一个日志分析器,可以从PostgreSQL日志文件创建报告。

 

(4)下载

 https://www.postgresql.org/download/

0225380034fe48c4aa72be0aa9b35f52.png

 

(5)psql命令详解

psql -h <hostname or ip> -p <端口> [数据库名称] [用户名称]
**psql常用连接参数**

缩写	说明
-h	数据库服务器主机
-p	数据库服务器端口
-U	数据库用户名
-d	连接的数据库名称
-c	运行一条sql命令, 然后退出
-f	执行文件中的命令, 然后退出
-l	列出可用的数据库, 然后退出
-V	输出版本信息,然后退出
-q	没有多余消息,只有查询输出
-H	查询结果以HTML表格形式输出

psql命令:

常用命令	说明
\q	退出命令行
\l	查看数据库列表
\c	切换数据库
\x	查询结果横纵显示切换
\s	查看命令历史记录
\h	查看所有的sql关键字
\?	命令行操作的帮助
\i	执行sql文件
\timing	执行SQL消耗时间开关
\encoding	显示字符集
\pset border 0	输出内容无边框
\pset border 1	边框只在内部存在
\pset border 2	内外都有边框
\d命令	说明
\d	显示表、索引和视图
+	显示更多的信息包括表和列的注释等相关信息
\da	显示所有可用聚集函数,以及它们操作的数据类型
\dA	显示访问方法
\dAc	显示方法子类别
\dAf	显示方法家庭
\dAo	显示方法家庭的操作员
\dAp	显示方法家庭的支持功能
\db	显示所有的表空间
\dc	显示所有字符集之间的可用转换
\dC	显示所有类型转换
\dd	显示所有可视对象,或所有匹配 pattern 的描述
\dD	显示所有可用域
\ddp	显示默认权限
\deu	显示用户映射
\df	显示匹配的函数(存储过程)
\dF	显示文本搜索配置
\dFd	显示文字搜索字典
\dFp	显示文本搜索解析器
\dFt	显示文字搜索模板
\dg	显示角色
\di	显示匹配的索引
\dl	显示一个大对象的列表,与\lo_list相同
\dL	显示程序语言
\dm	显示物化视图
\dn	显示所有可用模式(名字空间)
\do	显示所有可用操作符,以及它们的操作数和返回的数据类型
\dO	显示排序规则
\dp	显示表,视图和序列访问权限
\drds	显示每个数据库的角色设置
\ds	显示匹配的序列
\dt	显示匹配的表
\dT	显示数据类型
\du	显示角色
\dv	显示匹配的视图
\dx	列表扩展
\dy	显示事件触发器

(6)PostgreSQL数据库命令

常用命令:

CREATE DATABASE exampledb OWNER dbuser;  #创建用户数据库
GRANT ALL PRIVILEGES ON DATABASE exampledb TO dbuser; #将exampledb数据库的所有权限都赋予dbuser
\c dbname  #切换数据库,相当于mysql的use dbname
\dt #列举表,相当于mysql的show tables
\d tblname  #查看表结构,相当于desc tblname,show columns from tbname
\di  #查看索引
DROP DATABASE phone; # 删除数据库
DROP DATABASE phone with (force); #  强制删除数据库
create table test(id integer not null primary key);  #创建表(大小写均可)
alter table phone add column phone_number character varying(11) not null; #添加表的字段
alter table [表名A] rename to [表名B]; #重命名一个表
drop table [表名]; #删除一个表
alter table [表名] add column [字段名] [类型]; #在已有的表里添加字段
alter table [表名] drop column [字段名]; # 删除表中的字段
alter table [表名] rename column [字段名A] to [字段名B]; #重命名一个字段
alter table [表名] alter column [字段名] set default [新的默认值]; #给一个字段设置缺省值
alter table [表名] alter column [字段名] drop default;  #去除缺省值
insert into 表名 ([字段名m],[字段名n],......) values ([列m的值],[列n的值],......); 
//eg: insert into phone(id, phone_number) values(1, 18819259295);  #在表中插入数据
update [表名] set [目标字段名]=[目标值] where [该行特征]; 
eg: update phone set phone_number = replace('phone_number','8', '1'); #修改表中的某行某列的数据
delete from [表名] where [该行特征]; 
delete from [表名];--删空整个表     #删除表中某行数据
create table ([字段名1] [类型1] <references 关联表名(关联的字段名)>;,[字段名2] [类型2],......<,primary key (字段名m,字段名n,...)>;);  #创建表
SELECT * FROM pg_stat_activity;  #查看次数据库的连接

数据导入导出:

数据导出:
pg_dump:将一个PostgreSQL数据库转储到一个脚本文件或者其它归档文件中 

pg_dump mydb > db.sql:将mydb数据库转储到一个 SQL 脚本文件

pg_dump mydb -s > db.sql:将mydb数据库转储到一个 SQL 脚本文件(只导出数据库表结构,不带数据)

pg_dump -D -a -t zones_seq - t interway -t table_3 ... > /tmp/zones_seq.sql:导出部分表,支持通配符,见参考文章1

pg_dumpall:将一个PostgreSQL数据库集群转储到一个脚本文件中

数据导入:
psql:psql -U gpadmin -d your-db -f your-table.sql
pg_restore: pg_restore -d your-db your-table.tar

补充:

pg_dump -h 10.32.176.82 -p 5432 -U postgres -d sonarqube -f  /tmp/sonarqube.sql #数据库备份
createdb -h 10.32.176.82 -p 5432 -U postgres sonarqube
psql -h 10.32.176.82 -p 5432 -U postgres -d sonarqube -f sonarqube.sql    #数据库恢复

(7)PostgreSQL 与MySQL的区别

 

e7fd11f11c838a5a0404231062078cab.png

 

①MySQL

MySQL声称自己是最流行的开源数据库。LAMP中的M指的就是MySQL。构建在LAMP上的应用都会使用MySQL,如WordPress、Drupal等大多数php开源程序。MySQL最初是由MySQL AB开发的,然后在2008年以10亿美金的价格卖给了Sun公司,Sun公司又在2010年被Oracle收购。Oracle支持MySQL的多个版本:Standard、Enterprise、Classic、Cluster、Embedded与Community。其中有一些是免费下载的,另外一些则是收费的。其核心代码基于GPL许可,由于MySQL被控制在Oracle,社区担心会对MySQL的开源会有影响,所以开发了一些分支,比如: MariaDB和Percona。

② PostgreSQL

PostgreSQL标榜自己是世界上最先进的开源数据库。PostgreSQL的一些粉丝说它能与Oracle相媲美,而且没有那么昂贵的价格和傲慢的客服。最初是1985年在加利福尼亚大学伯克利分校开发的,作为Ingres数据库的后继。PostgreSQL是完全由社区驱动的开源项目。它提供了单个完整功能的版本,而不像MySQL那样提供了多个不同的社区版、商业版与企业版。PostgreSQL基于自由的BSD/MIT许可,组织可以使用、复制、修改和重新分发代码,只需要提供一个版权声明即可。

 ③MySQL与PostgreSQL的对比

MySQL的背后是一个成熟的商业公司,而PostgreSQL的背后是一个庞大的志愿开发组。这使得MySQL的开发过程更为慎重,而PostgreSQL的反应更为迅速。这样的两种背景直接导致了各自固有的优点和缺点。

④PostgreSQL相对于MySQL的优势

1)不仅仅是关系型数据库

除了存储正常的数据类型外,还支持存储:

  • array,不管是一位数组还是多为数组均支持
  • json(hStore)和jsonb,相比使用text存储接送要高效很多

json和jsonb之间的区别

jsonb和json在更高的层面上看起来几乎是一样的,但在存储实现上是不同的。

  • json存储完的文本,json列会每次都解析存储的值,它不支持索引,但你可以为查询创建表达式索引。
  • jsonb存储的二进制格式,避免了重新解析数据结构。它支持索引,这意味着你可以不使用指定的索引就能查询任何路径。

当我们比较写入数据速度时,由于数据存储的方式的原因,jsonb会比json稍微的慢一点。json列会每次都解析存储的值,这意味着键的顺序要和输入的时候一样。但jsonb不同,以二进制格式存储且不保证键的顺序。因此,如果你有软件需要依赖键的顺序,jsonb可能不是你的应用的最佳选择。使用jsonb的优势还在于你可以轻易的整合关系型数据和非关系型数据, PostgreSQL对于mongodb这类的基于文档的数据库是个不小的威胁,毕竟如果一个表中只有一列数据的类型是半结构化的,没有必要为了迁就它而整个表的设计采用schemaless的结构。

2)支持地理信息处理扩展

PostGIS 为PostgreSQL提供了存储空间地理数据的支持,使PostgreSQL成为了一个空间数据库,能够进行空间数据管理、数量测量与几何拓扑分析。在功能上,和MYSQL对比,PostGIS具有下列优势:

d6900d5592e2497fc68162e05d9b5aef.png

 

O2O业务场景中的LBS业务使用PostgreSQL + PostGIS有无法比拟的优势。

3)可以快速构建REST API

PostgREST 可以方便的为任何 PostgreSQL 数据库提供完全的 RESTful API 服务。

4)支持树状结构

支持R-trees这样可扩展的索引类型,可以更方便地处理一些特殊数据。MySQL 处理树状的设计会很复杂, 而且需要写很多代码, 而 PostgreSQL 可以高效处理树结构。

5)有极其强悍的 SQL 编程能力

支持递归,有非常丰富的统计函数和统计语法支持。

  • MySQL:支持 CREATE PROCEDURE 和 CREATE FUNCTION 语句。存储过程可以用 SQL 和 C++ 编写。用户定义函数可以用 SQL、C 和 C++ 编写。
  • PostgreSQL:没有单独的存储过程,都是通过函数实现的。用户定义函数可以用 PL/pgSQL(专用的过程语言)、PL/Tcl、PL/Perl、PL/Python 、SQL 和 C 编写。

6)外部数据源支持

可以把 70 种外部数据源 (包括 Mysql, Oracle, CSV, hadoop …) 当成自己数据库中的表来查询。Postgres有一个针对这一难题的解决方案:一个名为“外部数据封装器(Foreign Data Wrapper,FDW)”的特性。该特性最初由PostgreSQL社区领袖Dave Page四年前根据SQL标准SQL/MED(SQL Management of External Data)开发。FDW提供了一个SQL接口,用于访问远程数据存储中的远程大数据对象,使DBA可以整合来自不相关数据源的数据,将它们存入Postgres数据库中的一个公共模型。这样,DBA就可以访问和操作其它系统管理的数据,就像在本地Postgres表中一样。例如,使用FDW for MongoDB,数据库管理员可以查询来自文档数据库的数据,并使用SQL将它与来自本地Postgres表的数据相关联。借助这种方法,用户可以将数据作为行、列或JSON文档进行查看、排序和分组。他们甚至可以直接从Postgres向源文档数据库写入(插入、更细或删除)数据,就像一个一体的无缝部署。也可以对Hadoop集群或MySQL部署做同样的事。FDW使Postgres可以充当企业的中央联合数据库或“Hub”。

7)没有字符串长度限制

一般关系型数据库的字符串有限定长度8k左右,无限长 TEXT 类型的功能受限,只能作为外部大数据访问。而PostgreSQL的 TEXT 类型可以直接访问,SQL语法内置正则表达式,可以索引,还可以全文检索,或使用xml xpath。MySQL 的各种text字段有不同的限制,要手动区分 small text, middle text, large text… PostgreSQL 没有这个限制,text 能支持各种大小。

8)支持图结构数据存储

没有具体使用过,具体可以自己搜索下。参考链接:https://mp.weixin.qq.com/s/cjor82wgDu5gzDvTYpLDWw

9)支持窗口函数

窗口函数提供跨行相关的当前查询行集执行计算的能力。仅当调用跟着OVER子句的聚集函数,作为窗口函数;否则它们作为常规的聚合函数。窗口也是一种分组,但和 group by 的分组不同。窗口,可以提供分组之外,还可以执行对每个窗口进行计算。可以相像成是group by 后,然后对每个分组进行计算,而不像Group by ,只是单纯地分组。MySQL 不支持 OVER 子句, 而PostgreSQL支持。OVER 子句能简单的解决 “每组取 top 5” 的这类问题。MySQL支持的SQL语法(ANSI SQL标准)的很小一部分。不支持递归查询、通用表表达式(Oracle的with 语句)或者窗口函数(分析函数)。

10)对索引的支持更强

PostgreSQL 的可以使用函数和条件索引,这使得PostgreSQL数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。对于索引类型:

  • MySQL:取决于存储引擎。MyISAM:BTREE,InnoDB:BTREE。
  • PostgreSQL:支持 B-树、哈希、R-树和 Gist 索引。

InnoDB的表和索引都是按相同的方式存储。也就是说表都是索引组织表。这一般要求主键不能太长而且插入时的主键最好是按顺序递增,否则对性能有很大影响。PostgreSQL不存在这个问题。

索引类型方面,MySQL取决于存储引擎。MyISAM:BTREE,InnoDB:BTREE。PostgreSQL支持 B-树、哈希、R-树和 Gist 索引。

11)集群支持更好

Mysql Cluster可能与你的想象有较大差异。开源的cluster软件较少。复制(Replication)功能是异步的并且有很大的局限性。例如,它是单线程的(single-threaded),因此一个处理能力更强的Slave的恢复速度也很难跟上处理能力相对较慢的Master。

PostgreSQL有丰富的开源cluster软件支持。plproxy 可以支持语句级的镜像或分片,slony 可以进行字段级的同步设置,standby 可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单。

另外,PostgreSQL的主备复制属于物理复制,相对于MySQL基于binlog的逻辑复制,数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小。对于WEB应用来说,复制的特性很重要,mysql到现在也是异步复制,pgsql可以做到同步,异步,半同步复制。还有mysql的同步是基于binlog复制,类似oracle golden gate,是基于stream的复制,做到同步很困难,这种方式更加适合异地复制,pgsql的复制基于wal,可以做到同步复制。同时,pgsql还提供stream复制。

12)事务隔离做的更好

MySQL 的事务隔离级别 repeatable read 并不能阻止常见的并发更新, 得加锁才可以, 但悲观锁会影响性能, 手动实现乐观锁又复杂. 而 PostgreSQL 的列里有隐藏的乐观锁 version 字段, 默认的 repeatable read 级别就能保证并发更新的正确性, 并且又有乐观锁的性能。

13)对于字符支持更好一些

MySQL 里需要 utf8mb4 才能显示 emoji 的坑, PostgreSQL 没这个坑。

14)对表连接支持较完整

对表连接支持较完整,MySQL只有一种表连接类型:嵌套循环连接(nested-loop),不支持排序-合并连接(sort-merge join)与散列连接(hash join)。PostgreSQL都支持。

15)存储方式支持更大的数据量

PostgreSQL主表采用堆表存放,MySQL采用索引组织表,能够支持比MySQL更大的数据量。

16)时间精度更高

MySQL对于时间、日期、间隔等时间类型没有秒以下级别的存储类型,而PostgreSQL可以精确到秒以下。

17)优化器的功能较完整

MySQL对复杂查询的处理较弱,查询优化器不够成熟,explain看执行计划的结果简单。性能优化工具与度量信息不足。

PostgreSQL很强大的查询优化器,支持很复杂的查询处理。explain返回丰富的信息。提供了一些性能视图,可以方便的看到发生在一个表和索引上的select、delete、update、insert统计信息,也可以看到cache命中率。网上有一个开源的pgstatspack工具。
18)序列支持更好

MySQL 不支持多个表从同一个序列中取 id, 而 PostgreSQL 可以。

19)对子查询支持更好

对子查询的支持。虽然在很多情况下在SQL语句中使用子查询效率低下,而且绝大多数情况下可以使用带条件的多表连接来替代子查询,但是子查询的存在在很多时候仍然不可避免。而且使用子查询的SQL语句与使用带条件的多表连接相比具有更高的程序可读性。几乎任何数据库的子查询 (subquery) 性能都比 MySQL 好。

20)增加列更加简单

MySQL表增加列,基本上是重建表和索引,会花很长时间。PostgreSQL表增加列,只是在数据字典中增加表定义,不会重建表.

MySQL相对于PostgreSQL的优势

1)MySQL比PostgreSQL更流行

流行对于一个商业软件来说,也是一个很重要的指标,流行意味着更多的用户,意味着经受了更多的考验,意味着更好的商业支持、意味着更多、更完善的文档资料。易用,很容易安装。第三方工具,包括可视化工具,让用户能够很容易入门。

2)回滚实现更优

innodb的基于回滚段实现的MVCC机制,相对PG新老数据一起存放的基于XID的MVCC机制,是占优的。新老数据一起存放,需要定时触发VACUUM,会带来多余的IO和数据库对象加锁开销,引起数据库整体的并发能力下降。而且VACUUM清理不及时,还可能会引发数据膨胀。

3)在Windows上运行更可靠

与PostgreSQL相比,MySQL更适宜在Windows环境下运行。MySQL作为一个本地的Windows应用程序运行(在 NT/Win2000/WinXP下,是一个服务),而PostgreSQL是运行在Cygwin模拟环境下。PostgreSQL在Windows下运行没有MySQL稳定,应该是可以想象的。

4)线程模式相比进程模式的优势

MySQL使用了线程,而PostgreSQL使用的是进程。在不同线程之间的环境转换和访问公用的存储区域显然要比在不同的进程之间要快得多。

  • 进程模式对多CPU利用率比较高。进程模式共享数据需要用到共享内存,而线程模式数据本身就是在进程空间内都是共享的,不同线程访问只需要控制好线程之间的同步。
  • 线程模式对资源消耗比较少。所以MySQL能支持远比PostgreSQL多的更多的连接。但PostgreSQL中有优秀的连接池软件软件,如pgbouncer和pgpool,所以通过连接池也可以支持很多的连接。

5)权限设置上更加完善

MySQL在权限系统上比PostgreSQL某些方面更为完善。PostgreSQL只支持对于每一个用户在一个数据库上或一个数据表上的 INSERT、SELECT和UPDATE/DELETE的授权,而MySQL允许你定义一整套的不同的数据级、表级和列级的权限。对于列级的权限, PostgreSQL可以通过建立视图,并确定视图的权限来弥补。MySQL还允许你指定基于主机的权限,这对于目前的PostgreSQL是无法实现的,但是在很多时候,这是有用的。

6)存储引擎插件化机制

MySQL的存储引擎插件化机制,使得它的应用场景更加广泛,比如除了innodb适合事务处理场景外,myisam适合静态数据的查询场景。

7)适应24/7运行

MySQL可以适应24/7运行。在绝大多数情况下,你不需要为MySQL运行任何清除程序。PostgreSQL目前仍不完全适应24/7运行,这是因为你必须每隔一段时间运行一次VACUUM。

8)更加试用于简单的场景

PostgreSQL只支持堆表,不支持索引组织表,Innodb只支持索引组织表。

  • 索引组织表的优势:表内的数据就是按索引的方式组织,数据是有序的,如果数据都是按主键来访问,那么访问数据比较快。而堆表,按主键访问数据时,是需要先按主键索引找到数据的物理位置。
  • 索引组织表的劣势:索引组织表中上再加其它的索引时,其它的索引记录的数据位置不再是物理位置,而是主键值,所以对于索引组织表来说,主键的值不能太大,否则占用的空间比较大。
  • 对于索引组织表来说,如果每次在中间插入数据,可能会导致索引分裂,索引分裂会大大降低插入的性能。所以对于使用innodb来说,我们一般最好让主键是一个无意义的序列,这样插入每次都发生在最后,以避免这个问题。

由于索引组织表是按一个索引树,一般它访问数据块必须按数据块之间的关系进行访问,而不是按物理块的访问数据的,所以当做全表扫描时要比堆表慢很多,这可能在OLTP中不明显,但在数据仓库的应用中可能是一个问题。

 

2.PostgreSQL离线安装

(1)离线安装包准备

①首先可以访问网址
https://yum.postgresql.org/13/redhat/rhel-7-x86_64/repoview/postgresqldbserver13.group.html
来下载对应的离线安装包文件,具体的示例截图如下:

05a7c133c3764a55b2f0f05c5cce27d7.png

 ②通常情况下,需要下载如下几个RPM安装包:

 postgresql13-13.0-1PGDG.rhel7.x86_64
#安装扩展
postgresql13-contrib-13.0-1PGDG.rhel7.x86_64
#客户端进行连接.
postgresql13-libs-13.0-1PGDG.rhel7.x86_64
#数据库的安装文件
postgresql13-server-13.0-1PGDG.rhel7.x86_64
③注意:具体版本则需要根据自己的需要来进行选择,centos7对应于rhel7,如果是centos8 的话 选择 rhel8 进行下载。

④然后,就需要利用SSL工具将本地下载的RMP安装文件上传到CentOS7服务器。
(虽然服务器不能联网访问网站资源,但可以进行远程登录进行管理)。

(2)首先进入上述离线安装文件所在的目录,用ll命令查询一下安装包是否已经离线上传好

在postgresql13_rpm目录下,执行如下命令,进行安装包的安装:

yum localinstall *.rpm 

(3)期间可能会访问网络,但不影响安装,在提示是否确认安装时,选择y确认安装,等待安装即可。成功安装完postgresql 13 数据库之后,会自动创建一个服务,可以看一下名为postgresql-13的服务,使用如下命令进行服务状态查看:

systemctl status postgresql-13  

首次安装后,此命令会显示相关的文件信息:

Loaded: loaded (/usr/lib/systemd/system/postgresql-13.service; enabled; vendor preset: disabled)

(4)可以通过cat命令查看此文件的内容,其中包含相关的数据存储目录信息:
 

cat /usr/lib/systemd/system/postgresql-13.service
 Location of database directory
Environment=PGDATA=/var/lib/pgsql/13/data/ 
#程序目录
ExecStart=/usr/pgsql-13/bin/postmaster -D ${PGDATA} 

 

3.PostgreSQL初始化

(1)有了数据库的数据存储目录和程序所在目录,可以使用如下命令进行数据库的初始化工作,具体示例代码如下:

su - postgres
cd /usr/pgsql-13/bin/
#初始化数据库
./initdb -D /var/lib/pgsql/13/data/

(2)成功执行命令后,需要退出postgres命令环境,用root 用户启动postgresql 服务,并且设置postgresql服务为自动启动,这样在服务器重启后,无需手动再启动postgresql 服务,具体命令如下:

systemctl enable  postgresql-13 && systemctl restart postgresql-13

(3)最后,需要对PG数据库进行安全性方面的配置,比如修改密码,创建用户,设置登录策略等等,下面给出一些示例代码:

su - postgres
psql

(4)修改密码

alter role postgres with password 'your_root_pwd###';

(5)修改配置文件,配置登录策略等

vim /var/lib/pgsql/12/data/pg_hba.conf
#增加一行
host    all             all             0.0.0.0/0         md5   

注: trust 是免密, md5 是加密

(6)修改数据库其他配置信息

vim /var/lib/pgsql/13/data/postgresql.conf
listen_addresses = '*' 
max_connections = 700

(7)重启服务

systemctl restart  postgresql-13

(8)重启后,再次查看数据库状态

systemctl status postgresql-13  

4.PostgreSQL登录操作

(1)命令提示符前面的就是当前的数据库,使用 \l 查看当前的数据库列表

su - postgres
psql
\l 

(2)可以创建新的数据库

create database TEST with owner=postgres encoding='UTF-8';

(3)执行命令 \c 命令切换当前数据库为test

\c test

(4)执行 \d 可以查看当前数据库下的所有表

\d

(5)创建一张新表并再次查看

CREATE TABLE school (
    id        integer not null ,
    name      character(32),
    number    char(5),
    constraint sch_key primary key(id)
);

(6)执行 \d school可以查看表的详细信息

\d school;

(7)执行 \q 退出数据库

\q

 

二、实验

1.CentOS 7离线安装PostgreSQL

(1)背景

CentOS所在的服务器限于安全原因,客户并未给配置访问外网的权限,需在CentOS7 系统上离线安装PostgreSQL13数据库。

(2)离线安装包准备

05a7c133c3764a55b2f0f05c5cce27d7.png

(3) 离线安装

首先进入上述离线安装文件所在的目录,用ll命令查询一下安装包是否已经离线上传好,界面截图如下:

5eca4d2388a1486cb9662e353af93d40.png

 (4)在postgresql13_rpm目录下,执行如下命令,进行安装包的安装

2d701eec87844da38ea3b1da36494dad.png

 (4)查看状态

期间可能会访问网络,但不影响安装,在提示是否确认安装时,选择y确认安装,等待安装即可。成功安装完postgresql 13 数据库之后,会自动创建一个服务,可以看一下名为postgresql-13的服务,使用如下命令进行服务状态查看:

9d91be97da874d7b98cdf11fe10fd66c.png

首次安装后,此命令会显示相关的文件信息:

Loaded: loaded (/usr/lib/systemd/system/postgresql-13.service; enabled; vendor preset: disabled)

(5)可以通过cat命令查看此文件的内容,其中包含相关的数据存储目录信息:
2c4cae203e504dc0840ed09d27ce7b87.png

 (6)数据库初始化

6470b87c830e4f7790bc7aefbac2dc80.png

 (7)成功执行命令后,需要退出postgres命令环境,用root 用户启动postgresql 服务,并且设置postgresql服务为自动启动,这样在服务器重启后,无需手动再启动postgresql 服务,具体命令如下:

9ef414a010e44cdd865851dcf7a8932d.png

 (8)对PG数据库进行安全性方面的配置

b8f89dd654f64124b61a1a152c3ba8c7.png

 ②修改配置文件,配置登录策略等

5049a0ea6f264ee4b9d8ea9ac3fb0222.png

b738681b86ef41fc8d83434283ed4d01.png

 注: trust 是免密, md5 是加密

③修改数据库其他配置信息f68d48a2b9d248c89abd25940fb0fe25.png

739699b9544643199ee5d63fbb57c905.png

 ④重启服务

6f4e68dd73164391beff988df62e8d39.png

 ⑤重启后,再次查看数据库状态,命令如下:

23a3c93f2c504b95a38df9dab43b8401.png

 2.登录PostgreSQL

(1)命令提示符前面的就是当前的数据库,使用 \l 查看当前的数据库列表:

27508f5d2f6b456ab5cb4473a734b7db.png

6491a5273bcc4ebeab0dd76070967329.png

 (2)可以创建新的数据库:

abce37daff794ac39e422c23a64bbcf3.png

(3)执行命令 \c 命令切换当前数据库为test:

587298049e0744dd82299bd81cbcdd42.png

 (4)执行 \d 可以查看当前数据库下的所有表:

30301fedc66744a0b8b04e6cddc83371.png

(5) 创建一张新表并再次查看:

 fc5dafa9909942758760720ded1ab18a.png

 (6)执行 \d school可以查看表的详细信息2bbc30ad90cc4ff89906f8c3862b3868.png

 (7)执行 \q 退出数据库

e39ec1ca4056441ca35389ddba98e478.png

 

3.Navicat连接PosgreSQL

(1)新建连接

7a270180bb03496d9d04ea939fa8d3a5.png

 (2)测试连接

9c272230d4894080a40089e1e07fc168.png

 (3)连接

9b45a6d75d8148e286d4c81f013f1223.png

 

 

 

三、总结

MySQL从一开始就没有打算做所有事情,因而它在功能方面有一定的局限性,并不能满足一些先进应用程序的要求。MySQL对某些功能(例如引用、事务、审计等)的实现方式使得它与其他的关系型数据库相比缺少了一些可靠性。对于简单繁重的读取操作,使用PostgreSQL可能有点小题大做,同时性能也比MySQL这样的同类产品要差。除非你需要绝对的数据完整性,ACID遵从性或者设计复杂,否则PostgreSQL对于简单的场景而言有点多余。

如何确定只在MySQL和PostgreSQL中进行选择,以下规则总是有效的:

①如果操作系统是Windows,你应该使用MySQL。

②当绝对需要可靠性和数据完整性的时候,PostgreSQL是更好的选择。

③如果需要数据库执行定制程序,那么可扩展的PostgreSQL是更好的选择。

④如果应用处理的是地理数据,由于R-TREES的存在,应该使用PostgreSQL。

⑤如果对数据库并不了十分了解,甚至不知道事务、存储过程等究竟是什么,应该使用MySQL。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/41244.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

性能测试工具 jmeter 录制脚本,传递 cookie,循环执行接口

目录 前言&#xff1a; 代理录制脚本 循环重复添加接口 登录并传递 cookie 给新建产品接口 循环执行脚本 前言&#xff1a; 在使用JMeter进行性能测试时&#xff0c;录制脚本是一种常用的方法。录制脚本可以帮助你捕获和重放用户与应用程序之间的交互&#xff0c;以模拟真…

matlab中画有重影的机器人运动过程【给另一个机器人设置透明度】

1、前言如题 2、参考连接如下 How to plot two moving robot in the same figure and change one of them transparency&#xff1f; - MATLAB Answers - MATLAB Central (mathworks.cn)3、代码&#xff1a;【找到figure中对应对象并设置属性】 % Create two instances of a…

什么是70v转12v芯片?

问&#xff1a;什么是70v转12v芯片&#xff1f; 答&#xff1a;70v转12v芯片是一种电子器件&#xff0c;其功能是将输入电压范围在9v至100v之间的电源转换为稳定的12v输出电压。这种芯片通常被用于充电器、车载电池充电器和电源适配器等设备中。 问&#xff1a;这种芯片的最大…

微信小程序使用字体图标——链接引入

目录 1.下载字体图标 1.选择需要的图标加入购物车添加到项目 2.查看项目 3.生成在线链接 4.复制生成的链接 等下放到iconfont.json中​编辑 2.引入链接 1.下载 2.生成iconfont.json文件 3. 在iconfont.json中 放入生成的链接 4.需要重新编译小程序之后在终端执行 5…

03 QT对象树

Tips: QT通过对象树机制&#xff0c;能够自动、有效的组织和管理继承自QObject的Qt对象&#xff0c;不需要用户手动回收资源&#xff0c;系统自动调用析构函数。 验证对象树功能&#xff1a; 新建C文件 继承自QPushButton&#xff0c;但没有QPushButton&#xff0c;但有其父类…

【雕爷学编程】Arduino动手做(164)---Futaba S3003舵机模块3

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

GPT与人类:人工智能是否能够真正复制人类语言?

人类语言是一种复杂的系统&#xff0c;它不仅包含着无数单词和语法规则&#xff0c;更重要的是具有丰富的含义和上下文。这些语言特征涉及到常识、文化、情感和经验等方面&#xff0c;是人类在长期进化和文明发展中所积累起来的丰富知识和经验的体现。然而&#xff0c;人工智能…

微服务Day3——Nacos配置管理\Feign远程调用\Gateway网关

一、Nacos配置管理 1、统一配置管理 当微服务部署的实例越来越多&#xff0c;达到数十、数百时&#xff0c;逐个修改微服务配置就会让人抓狂&#xff0c;而且很容易出错。我们需要一种统一配置管理方案&#xff0c;可以集中管理所有实例的配置。 Nacos一方面可以将配置集中管理…

基于阿里云微信小程序语音识别

页面效果 其中采用阿里云语音识别&#xff1a;阿里云一句话语音识别 语音识别页面 <template><view><view class"chat_list"><view v-for"v in chatList" :class"v.type right ? type_right : type_left"><chat …

redis数据类型和数据结构你了解吗 学习总结篇!

大家好&#xff0c;我是三叔&#xff0c;很高兴这期又和大家见面了&#xff0c;一个奋斗在互联网的打工人。 这期给大家讲一下关于 Redis 数据类型和数据结构的区别&#xff0c;很多读者包括笔者自己&#xff0c;早期也是傻傻分不清。备注&#xff1a;部分图片借鉴小林哥&…

Appium 安卓环境的配置

目录 前言&#xff1a; 环境准备 写个脚本玩玩 前言&#xff1a; 在使用Appium进行安卓自动化测试之前&#xff0c;需要配置相应的安卓环境。 环境准备 为了避免走弯路&#xff0c;我们先要确保三点&#xff1a; Android SDK API > 17 (Additional features require …

JMeter正则表达式提取器和JSON提取器基础用法,小白必会!

最近在利用JMeter做接口自动化测试&#xff0c;正则表达式提取器和JSON提取器用的还挺多&#xff0c;想着分享下&#xff0c;希望对大家的接口自动化测试项目有所启发。 在 JMeter 中&#xff0c;正则表达式和 JSON 提取器都是用于从响应数据中提取所需内容&#xff0c;但它们的…

spring复习:(39)注解方式的ProxyFactoryBean

一、定义接口 package cn.edu.tju.study.service;public interface MyService {void myMethod(); }二、定义实现类&#xff1a; package cn.edu.tju.study.service;public class MyServiceImpl implements MyService{Overridepublic void myMethod() {System.out.println(&qu…

css背景毛玻璃效果

一、结论&#xff1a;通过 css 的 backdrop-filter 属性设置滤镜函数 blur 一般会是有 背景色、透明度 的容器&#xff0c;如&#xff1a; /* 宽高等其他设置这里省略没写 */ background:rgba(3, 87, 255, 0.3); backdrop-filter: blur(10px);二、backdrop-filter 的其他用法…

ASL/CS系列音视频转换方案芯片,Typec拓展坞方案芯片

音视频单转方案芯片&#xff1a; CS5565 Typec转HDMI 8K 60HZ转换方案 可替代RTD2173 PS196 CS5801 HDMI转eDP/DP方案 可替代LT6711 CS5212 DP转VGA转换方案 可PIN TO PIN 替代RTD2166 CS5211 E…

《红蓝攻防构建实战化网络安全防御体系》读书笔记

作者&#xff1a;奇安信安服团队 ◆ 1.3 红队 各个团队在演练中的角色与分工情况如下。目标系统运营单位&#xff1a;负责红队整体的指挥、组织和协调。安全运营团队&#xff1a;负责整体防护和攻击监控工作。攻防专家&#xff1a;负责对安全监控中发现的可疑攻击进行分析和研…

vue写车牌号 自定义键盘

vue写车牌号自定义键盘 <template><div><div class"content-wrapper"><div class"content-top-wrapper"><van-radio-group v-model"radioCarType"><van-radio name"1">蓝牌<imgslot"icon…

前端学习笔记:JavaScript基础语法(ECMAScript)

此博客参考b站&#xff1a;【黑马程序员前端JavaScript入门到精通全套视频教程&#xff0c;javascript核心进阶ES6语法、API、js高级等基础知识和实战教程】https://www.bilibili.com/video/BV1Y84y1L7Nn?p76&vd_source06e5549bf018e111f4275c259292d0da 这份笔记适用于已…

ETHERNET/IP转TCP/IP网关tcp/ip协议包含哪几层

大家好&#xff0c;今天我们将带大家了解一款自主研发的通讯网关&#xff0c;远创智控YC-EIP-TCP/IP。这是一个强大的工具&#xff0c;能帮助我们将ETHERNET/IP网络和TCP/IP网络连接在一起&#xff0c;让我们更好地管理和监控网络。 1, 首先&#xff0c;让我们来看看这款网关…

Html基础知识学习——圣杯布局、margin负值、等高布局(十七)

文章目录 圣杯布局margin负值等高布局 圣杯布局 两边页面固定中间页面宽度随着浏览器大小自适应 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-widt…