PostgreSQL 入门

文章目录

  • PostgreSQL介绍
  • PostgreSQL和MySQL的区别
  • PostgreSQL的安装
  • PostgreSQL的配置
    • 远程连接配置
    • 配置数据库的日志
  • PostgreSQL基本操作
    • 用户操作
    • 权限操作
  • 图形化界面安装
  • 总结

PostgreSQL介绍

PostgreSQL是一个功能强大的 开源 的关系型数据库,底层基于C实现。其开源协议和Linux内核版本的开源协议是一样的,简单来说就是:可以对PostgreSQL进行一些封装,然后商业化是收费。

PostgreSQL之前叫Ingres,后面为了解决一些ingres中的一些问题,作为后面的ingres,就起名叫PostgreSQL。

PostgreSQL版本迭代的速度比较快,现在最新的正式的发布版本,已经到了15.RELEASE。

PostgreSQL的版本选择一般有两种:

  • 如果为了稳定的运行,推荐使用12.x版本。
  • 如果想体验新特性,推荐使用14.x版本。

PostgreSQL的官方地址:https://www.postgresql.org/

PostgreSQL的国内社区:http://www.postgres.cn/v2/home

PostgreSQL和MySQL的区别

技术没有好坏之分,只是看一下是否符合你的业务,能否解决你的业务需求。其次也要查看社区的活跃度以及更新的频次。

MySQL不支持的几点内容:

  • MySQL的数据类型不够丰富。
  • MySQL不支持序列概念,Sequence。
  • 使用MySQL时,网上比较好用的插件。
  • MySQL的性能优化监控工具不是很多,定位问题的成本是比较高。
  • MySQL的主从复制没有一个官方的同步策略,同步问题难以解决。
  • MySQL虽然开源,但是不够彻底。

PostgreSQL相对MySQL上述问题的特点:

  • PostgreSQL的数据类型丰富。
  • PostgreSQL是有序列的概念的。
  • PostgreSQL的插件特别丰富。
  • PostgreSQL支持主从复制的同步操作,可以实现数据的0丢失。
  • PostgreSQL的MVCC实现和MySQL不大一样。PostgreSQL一行数据会存储多个版本。最多可以存储40亿个事务版本。

PostgreSQL的安装

推荐在Linux中安装,Linux的版本尽量使用7.x版本,最好是7.6或者是7.8版本。根据官网的引导进行安装:

image.png

填写版本、平台等信息。拿到命令直接执行

image.png

# 下载PGSQL的rpm包
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 安装PGSQL12的软件程序,需要下载,需要等一会,一般不会失败,即便失败,他也会重新帮你找镜像
sudo yum install -y postgresql12-server
# 数据库初始化
sudo /usr/pgsql-12/bin/postgresql-12-setup initdb
# 设置开启启动项,并设置为开启自行启动
sudo systemctl enable postgresql-12
# 启动PGSQL
sudo systemctl start postgresql-12

这种方式基本不会出错。如果出错,可能是以下几个问题:

  • Linux没有连接外网
  • Linux中的5432端口,可能被占用了

PostgreSQL不推荐使用root管理,在安装成功后,默认会创建一个用户:postgres ,进行操作时切换到该账户

su postgres

直接输入psql即可进入到postgreSQL提供的客户端

# 进入命令行
psql
# 查看有哪些库,如果是新安装的,有三个库,一个是postgres,template0,template1
\l  

不推荐下载Windows版本去玩

如果非要下载:https://sbp.enterprisedb.com/getfile.jsp?fileid=1258242

PostgreSQL的配置

要关注两个配置信息,一个关于PostgreSQL的远程连接配置以及postgreSQL的日志配置。

PostgreSQL的主要配置放在数据目录下的, postgresql.conf 以及 pg_hba.conf 配置文件

这些配置文件都放在了这个目录下

/var/lib/pgsql/12/data

image.png

上图可以看到,postgreSQL的核心文件,都属于postgres用户,操作的时候,尽可能的别用root用户,容易出坑,尽可能先切换到postgres用户。

远程连接配置

PostgreSQL默认情况下不支持远程连接的,这个跟MySQL几乎一样

  • MySQL给mysql.user追加用户,一般是采用grant的命令。
  • PostgreSQL要基于配置文件修改,才能制定用户是否可以远程连接。

直接去修改pg_hba.conf配置文件

用户以及对应数据库和连接方式的编写模板

image.png

local:代表本地连接,host代表可以指定连接的ADDRESS
database编写数据库名,如果写all,代表所有库都可以连接
user编写连接的用户,可以写all,代表所有用户
address代表那些IP地址可以连接
method加密方式,这块不用过多关注,直接md5
# 如果为了省事,直接来个痛快的配置,允许任意地址的全部用户连接所有数据库
host    all             all             0.0.0.0/0               md5

image.png

为了实现远程连接,除了用户级别的这种配置,还要针对服务级别修改一个配置

服务级别的配置在postgresql.conf

image.png发现默认情况下,PGSQL只允许localhost连接,直接配置为*即可解决问题

image.png

为了生效,一定要重启

# postgres密码不管,直接root用户
sudo systemctl restart postgresql-12

配置数据库的日志

查看postgresql.conf文件

image.png

postgreSQL默认情况下,只保存7天的日志,循环覆盖。

# 代表日志是开启的。
logging_collector = on
# 日志存放的路径,默认放到当前目录下的log里
log_directory = 'log'
# 日志的文件名,默认是postgresql为前缀,星期作为后缀
log_filename = 'postgresql-%a.log'
# 默认一周过后,日志文件会被覆盖
log_truncate_on_rotation = on
# 一天一个日志文件
log_rotation_age = 1d
# 一个日志文件,没有大小限制
log_rotation_size = 0

PostgreSQL基本操作

只在psql命令行(客户端)下,执行了一次\l,查看了所有的库信息

可以直接基于psql查看一些信息,也可以基于psql进入到命令行后,再做具体操作

image.png 命令不用背,需要使用的时候,直接找帮助文档,在psql命令行中,直接输入

\help,即可查看到数据库级别的一些命令
\?,可以查看到服务级别的一些命令

用户操作

构建用户命令

# 区别就是create user默认有连接权限,create role没有,不过可以基于选项去设置
CREATE USER 名称 [ [ WITH ] 选项 [ ... ] ]
create role 名称 [ [ WITH ] 选项 [ ... ] ]

构建一个超级管理员用户

create user root with SUPERUSER PASSWORD 'root';

image.png

编写psql命令尝试去用root用户登录

psql -h 192.168.11.32 -p 5432 -U root -W

这时候会发现光有用户不让登录,得让用户有一个数据库,直接构建一个root库

create database root;

权限操作

权限操作前,要先掌握一下PostgreSQL的逻辑结构

逻辑结构图
image.png

可以看到PostgreSQL一个数据库中有多个schema,在每个schema下都有自己的相应的库表信息,权限粒度会比MySQL更细一些。

在PGSQL中,权限的管理分为很多多层

server、cluster、tablespace级别:这个级别一般是基于pg_hba.conf去配置

database级别:通过命令级别操作,grant

namespace、schema级别:玩的不多……不去多了解这个~~

对象级别:通过grant命令去设置

后面如果需要对database或者是对象级别做权限控制,直接基于grant命令去操作即可

# 查看grant命令
\help grant

图形化界面安装

图形化界面可以连接PGSQL的很多,Navicat(收费),也可以直接使用PostgreSQL官方提供的图形化界面(完全免费)。

下载官方提供的各操作系统的版本,进行傻瓜式安装

image.png

添加一个新的连接

image.png

总结

PostgreSQL其实在国外使用的比较多,国内暂时还是以MySQL为主。但是国内很多国产数据库都是基于PostgreSQL做的二次封装,比如:华为GaussDB还有腾讯的Tbase等等。很多公司原来玩的Oracle,直接平转到PostgreSQL,而且国内的很多云产品都支持PostgreSQL了。

因为开源,有很多做数据迁移的工具,可以让你快速的从MySQL,SQLServer,Oracle直接平转到PostgreSQL中内部,比如pgloader这样的数据迁移工具。

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

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

相关文章

面向对象程序设计1-类的定义和使用

第1关:数字时钟走字 任务描述 本关任务:本题中已给出一个时钟类的定义,请模拟数字时钟走字过程。 相关知识 为了完成本关任务,你需要掌握:1.类和对象。 编程要求 根据提示,在右侧编辑器补充代码&…

模板初阶学习

✨前言✨ 📘 博客主页:to Keep博客主页 🙆欢迎关注,👍点赞,📝留言评论 ⏳首发时间:2023年11月21日 📨 博主码云地址:博主码云地址 📕参考书籍&…

Scala---WordCount

一、创建Maven项目导入pom.xml文件 安装Maven仓库管理工具,版本要求是3.2版本以上。新建Maven项目,配置pom.xml。导入必要的包。 二、Spark-Scala版本的WordCount 1.val conf new SparkConf() 2.conf.setMaster("local") 3.conf.setAppNam…

4、FFmpeg命令行操作4

ffmpeg命令参数说明 主要参数: -i 设定输入流 -f 设定输出格式(format) -ss 开始时间 -t 时间长度 音频参数: -aframes 设置要输出的音频帧数 -b:a 音频码率 -ar 设定采样率 -ac 设定声音的Channel数 -acodec 设定声音编解码器,如果用copy表示原始编解码数…

【刷题专栏—突破思维】LeetCode 138. 随机链表的复制

前言 随机链表的复制涉及到复制一个链表,该链表不仅包含普通的next指针,还包含random指针,该指针指向链表中的任意节点或空节点。 文章目录 原地修改链表 题目链接: LeetCode 138. 随机链表的复制 原地修改链表 题目介绍&#xf…

拖拽场景遇到 iframe 无法拖拽的问题解决方案

描述一个场景:在网页中,分为上下两部分布局,下半部分显示操作日志,下半部分的区域高度是可拖拽调整的,但是如果下半部分嵌入一个 iframe 的时候,往上拖拽可以,但是往下拖拽,一旦到了…

分类问题的评价指标

一、logistic regression logistic regression也叫做对数几率回归。虽然名字是回归,但是不同于linear regression,logistic regression是一种分类学习方法。 同时在深度神经网络中,有一种线性层的输出也叫做logistic,他是被输入…

【python学习】基础篇-常用模块-shutil文件和目录操作

shutil模块是Python标准库中的一个模块,提供了对文件和目录进行高级操作的函数。 以下是shutil模块的一些常用函数: 1.复制文件: 将源文件src复制到目标文件dst。如果follow_symlinks为True,则会跟随符号链接。 shutil.copy(src, dst, *, f…

以太网_寻址

【架构图】 【ipconfig/all】 MAC地址:作用于本地网络,数据包发送到本地交换机或路由器后经判断目的地址是本地网络地址会转发给当前MAC地址对应的网线端口。 IP地址:供路由器寻址,会跟子网掩码进行运算,属于同一网络…

git问题: git@10.18.*.*: Permission denied (publickey,password)

遇到的问题: openSSH版本太高,openssh高版本默认禁止ssh-rsa加密算法,直接换ed25519 执行以下命令: 在.ssh目录下执行:ssh-keygen -t ed25519 -C “youremail.com” ssh-add ~/.ssh/id_ed25519 将id_ed25519.pub添加…

Java 数据结构、集合框架、ArrayList

一、Java数据结构: Java中的数据结构主要包含以下几种接口和类:枚举、位集合、向量、栈、字典、哈希表、属性。 枚举接口定义一种从数据结构中取回连续元素的方式。 位集合实现了一组可以单独设置和清除的位或标志。 向量类于传统数组相似&#xff0…

信也科技发布2023年Q3财报:数字金融服务业务增长稳健,持续拉动实体消费

11月21日,信也科技(NYSE:FINV)公布2023年第三季度未经审计的财务报告。财报显示,信也科技三季度在国内、国际市场延续稳健增长态势,实现季度营收31.98亿元(人民币,下同)&…

LeetCode 每日一题 2023/11/13-2023/11/19

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 11/13 307. 区域和检索 - 数组可修改11/14 1334. 阈值距离内邻居最少的城市11/15 2656. K 个元素的最大和11/16 2760. 最长奇偶子数组11/17 2736. 最大和查询11/18 2342. 数…

【Python入门教程】OpenCV在图片/视频上添加Logo(水印)

还是老样子,最近项目需要在视频上添加logo,所以就找了一下相关资料,然后写了一段代码,今天给大家分享一下如何使用Python的OpenCV库给图片或视频添加水印和logo。 一、导入库 OpenCV库导入的时候是cv2 import cv2 二、代码部分 …

BigDecimal的常见陷阱

文章目录 BigDecimal概述BigDecimal常见陷阱1.使用BigDecimal的构造函数传入浮点数2.使用equals()方法进行数值比较3.使用不正确的舍入模式 总结: BigDecimal概述 BigDecimal 是 Java 中的一个类,用于精确表示和操作任意精度的十进制数。它提供了高精度的…

UE 材质,如何只取0~1之间的值,其余值抛弃

假如0~1,floor为0,abs为0,Saturate为0,1-x为1,很好 假如1~2,floor为1,abs为1,Saturate为1,1-x为0,很好 假如2~3,floor为2,abs为2&am…

软件测试/人工智能丨引领未来:软件测试中的人工智能

在数字化潮流的推动下,软件测试领域正在经历一场革命性的变革,而这场变革的关键推手正是人工智能(AI)。AI的引入不仅加速了测试过程,而且赋予了测试领域新的可能性,将我们带入了一个前所未有的未来。 智能…

【MySQL--->用户管理】

文章目录 [TOC](文章目录) 一、用户管理表二、基本操作三、用户权限分配给用户某个数据库中某个表的某个权限. grant 权限 on 库.表名 to 用户名主机名. ![在这里插入图片描述](https://img-blog.csdnimg.cn/fe8eb171ef9343c3a09bd64d4f0db5c1.png)分配给用户某个数据库中全部表…

Golang CSV Reader

导言 CSV(逗号分隔值)是一种常见的文件格式,用于存储和交换数据。它简单易用,具有广泛的应用场景,因此在处理和解析 CSV 文件时需要一个高效和可靠的方法。Golang 提供了一个强大的 CSV Reader 库,可以简化…

13.Oracle通过JDBC连接Java

Oracle通过JDBC连接Java 一、什么是JDBC二、Oracle通过JDBC连接Java1、导入jar包1.1 下载jar包1.2 将jar包导入到java项目中1.3编译jar包 2、连接数据库2.1 编写jdbc工具类2.2 对数据进行基本操作 一、什么是JDBC JDBC(Java Database Connectivity)是Jav…