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

news2024/12/27 13:04:43

目录

一、理论

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。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3 -- mitt 插件使用

介绍 mitt插件是Vue3中的一种第三方总线插件,它可以用于在组件之间进行通信。相比于Vue实例上的EventBus,mitt.js足够小,仅有200bytes,支持全部事件的监听和批量移除,它还不依赖Vue实例,所以可以跨框架使用,React或者Vue,甚至jQuery项目都能使用同一套库 . 使用 1:下载插…

Interactive Image Segmentation

Focused and Collaborative Feedback Integration for Interactive Image Segmentation CVPR 2023 清华 Interactive image segmentation aims at obtaining a segmentation mask for an image using simple user annotations. During each round of interaction, the segment…

windows打开此类文件前总是询问怎么解决

打开此类文件前总是询问怎么解决这个一直提示的问题呢&#xff1f; 下面来教大家一个方法杜绝再提示&#xff1a; 开始 --> 运行 --> gpedit.msc (组策略) --> 用户配置 --> 管理模板 --> windows组件 --> 附件管理器 --> 右击 "中等危险文件类型的包…

再学JavaScript

九、常见的运算符 两个等号只判断值&#xff0c;三个等号判断值和类型是否相等 逻辑运算符 注意&&和& ||和| 短路 赋值运算符 自加自减运算符 三目运算符 移位运算符 十、JavaScript的数据类型转换 假如用默认值10&#xff0c;控制台结果就是1035&#xff08…

学生管理系统--java+mysql

学生管理系统 简介 练习&#xff1a;完成学生信息的增删查改&#xff08;根据id&#xff09;&#xff0c;项目进行了三层架构进行创建。 pojo层&#xff0c;dao层&#xff0c;service层&#xff0c;utils层&#xff0c;程序入口&#xff1b; 1.pojo层 实体层 数据库在项目…

基于linux下的高并发服务器开发(第一章)- dup,dup2函数

int dup(int oldfd);复制文件描述符 /*#include <unistd.h>int dup(int oldfd);作用&#xff1a;复制一个新的文件描述符fd3, int fd1 dup(fd),fd指向的是a.txt, fd1也是指向a.txt从空闲的文件描述符表中找一个最小的&#xff0c;作为新的拷贝的文件描述符*/#include &…

80C51定时/计数器的应用之实现PWM(脉冲宽度调制)

知识来源于链接&#xff1a;https://www.bilibili.com/video/BV1eT4y1J7wB/?spm_id_from333.880.my_history.page.click&vd_sourceb91967c499b23106586d7aa35af46413 这种模拟实现 PWM 波的应用只能应用于对波形精度和频率要求不高的情况下。 一、程序思路分析 这里想要…

Redis缓存雪崩、穿透、击穿原因分析和解决方案,附Redis管道使用技巧

先给大家附上其他几篇文章&#xff0c;感兴趣的自行开车导航 Redis过期策略和持久化机制全面揭秘&#xff0c;教你如何合理配置 【深入浅出Redis 一】从版本特性到数据类型到线程模型&#xff0c;带你了解Redis的核心特性和应用场景&#xff01; 一次redis OOM问题分析解决&…

PyTorch深度学习——Anaconda和PyTorch安装

一、Anaconda安装 前言 安装anaconda后主要有一下3点好处&#xff1a; 1.包含环境管理器conda。 2.大量安装基于python的工具包。 3.可以创建使用和管理不同的python版本。 附上百度百科的解释&#xff1a; 下载步骤&#xff1a; 1.官网下载anaconda 2.双击之后安装即可 …

【Linux】进程间通信——管道与共享内存

文章目录 前言 1、三个问题1-1、什么是通信&#xff1f;1-2、为什么要有通信1-3、怎么进行通信&#xff1f;1-4、进程间通信分类 2、管道2-1、匿名管道2-1-1、理解通信本质问题2-1-2、进一步理解管道2-1-3、代码实现pipe函数 2-1-4、读写特征2-1-5、管道的特点&#xff08;重点…

MQTT springboot + idea

参考链接&#xff1a;&#xff08;第一个是理论 第二个是代码 我是直接cv的 我就不贴代码了&#xff09; MQTT协议基本流程、原理_mqtt协议工作原理_Nimrod__的博客-CSDN博客 SpringBoot整合MQTT_springboot mqtt_N_P_E的博客-CSDN博客 EMQX 入门教程③——默认端口、端口策…

10.Java 基本数据类型与包装类之间的转换

Java 的包装类便是一种特殊的引用数据类型&#xff0c;因为其是与基本数据类型一一对应的 1.装箱和拆箱 装箱指的是将基本数据类型转为包装类&#xff1b;拆箱指的是将包装类转为基本数据类型 1.1 int 与 Integer 之间的转换 int → Integer int i 13; Integer integer I…

基于JSP+servlet+JDBC开发的人物管理系统

文章目录 技术说明【效果图】源码 技术说明 后端&#xff1a;JspServletJDBC 前端&#xff1a;BootStrap技术 数据库&#xff1a;Mysql 其他&#xff1a;ckeditor富文本编辑器、FileUpload组件上传图片、MD5加密技术 功能&#xff1a;人物的增删改查 【效果图】 源码 https:…

mysql、redis 、RabbitMQ只能本机访问,怎么改?

如果只能本机访问&#xff0c;怎么改? 一、mysql - 改my.ini 刷脚本 bind-address0.0.0.0 然后重启一下mysql服务 任务管理器-关掉mysql 搜索 计算机管理-重启mysql服务 然后 打开查询&#xff0c;并选择mysql数据&#xff0c;输入这个sql语句&#xff0c;点击运行 sele…

小程序首页轮播图设计

效果图 微信小程序的数据详解 indicator-dots&#xff1a;是否显示面板指示点【默认false 】 indicator-color&#xff1a;指示点颜色【默认rgba(0, 0, 0, .3)】 indicator-active-color&#xff1a;当前选中的指示点颜色【默认#000000】 autoplay&#xff1a;是否自动切换…

总结928

在备考的过程中&#xff0c;我时不时会思考这个问题&#xff0c;我到底怎么样才能“一战成硕”&#xff0c;这个问题本质上就是如何达成目标的问题。 曾遇到这么一句话&#xff0c;90%的人没有目标&#xff0c;99.9%的人败在了目标上。当看到这句话&#xff0c;我还以为是我的…

WEB:upload1

题目 看到文件上传的一般思路是&#xff1a;构建一句话木马&#xff0c;利用bp修改包后缀名&#xff08;一般会限制上传文件类型&#xff09;&#xff0c;上传成功以后注意文件位置&#xff0c;利用菜刀或者是中国蚁剑进行连接&#xff0c; 然后获得flag 构建一句话木马 <…

什么是产品生命周期(PLM)管理系统?

引言 产品生命周期管理 (PLM) 涉及产品生命周期的每个阶段。从产品设计人员进行创造性构思&#xff0c;到物联网网络发送和接收宝贵的数据&#xff0c;再到接收客户真实且及时的反馈&#xff0c;整个产品生命周期中的每一条信息都至关重要&#xff0c;构成了完整的产品构成。 …

【雕爷学编程】Arduino动手做(02)---光敏电阻模块2

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

联动规则组件-KOV场景梳理技术方案

一、背景&#xff1a; 多场景使用到kov类型组件&#xff0c;但是实现上不统一&#xff0c;各个场景的协议都比较定制&#xff0c;且开发的时候难度较大。所以将组件进行抽离 目标&#xff1a;支撑所有逻辑场景 什么是kov&#xff1f;如下图&#xff1a; 难点&#xff1a; 1、…