首页 > 数据库 >PostgreSQL基础(一)

PostgreSQL基础(一)

时间:2024-10-25 13:34:33浏览次数:7  
标签:PostgreSQL postgres 数据库 基础 pg MySQL 空间

简介

PostgreSQL是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。
PostgreSQL的Slogan是“世界上最先进的开源关系型数据库” 号称是“开源界的Oracle”,去O首选
PostgreSQL官网
https://www.postgresql.org/
PostgreSQL中文社区
http://www.postqres.cn/v2/ home
全球数据库排行
https://db-engines.com/en/
国产数据库排行
https://www.modb.pro/dbRank

PostgreSQL与Mysql对比

PostgreSQL的优势:
1)在SQL的标准实现上要比MySQL完善,而且功能实现比较严谨
2)对表连接支持较完整,优化器的功能较完整,支持的索引类型很多,复杂查询能力较强。
3)PG主表采用堆表存放,MySQL采用索引组织表,能够支持比MySQL更大的数据量。
4)PG的主备复制属于物理复制,相对于MySQL基于binlog的逻辑复制,数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小。
5)PostgreSQL支持ISON和其他NOSQL功能(文档存储),如本机XML支持和使用HSTORE的键值对。它还支持索引SON数据以加快访问速度,特别是10版本JSONB更是强大
6)PostareSQL完全免费,而且是BSD协议,如果你把PostgreSQL改一改,然后再拿去卖钱也没有人管你,这一点很重要,这表明了PostgreSOl数据库不会被其它公司控制。相反,MySQL现在主要是被Oracle公司控制。
PostgreSQL的劣势:
1)innodb的基于回滚段实现的MVCC机制,相对PG新老数据一起存放的基于XID的MVCC机制是占优的。
新老数据一起存放,需要定时触发VACUUM,会带来多余的I0和数据库对象加锁开销,引起数据库整体的并发能力下降。而且VACUUM清理不及时,还可能会引发数据膨胀。
2)MSQL采用索引组织表,这种存储方式非常适合基于主键匹配的査询、删改操作,但是对表结构设计存在约束。
3)MySQL的优化器较简单,系统表、运算符、数据类型的实现都很精简,非常适合简单的查询操作。

总结:
从应用场景来说PG更加适合严格的企业应用场景(比如金融、电信、ERP、CRM)。
不仅仅限制于此,PostareSQl的json,isonb,bstore等数据格式,特别适用于一些大数据格式的分析。
而MySQL更加适合业务逻辑相对简单、数据可靠性要求较低的互联网场景(比如google、facebook、alibaba),
当然现在MySQL的在innodb引擎的大力发展,功能表现良好

下载及安装

访问官网下载地址
https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

  • windos
    安装路径:尽量避免存在中文的情况
    数据目录:,默认路径就可以
    postgres密码(类似超级管理员root)
    安装后通过pgAdmin4图形化界面客户端登录数据,使用安装设置的密码。

    也可以通过SQL Shell命令行登录。
    开启远程访问:在安装路径找到data目录下的pg_hba文件
修改pg_hba.conf文件:在IPV4部分添加新的一行:
host all all 0.0.0.0/0 md5
修改后重启postgres
在服务中查询postgres服务进行重启
  • Linux
#安装yum源
sudo yum install -y https: //download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
#安装pg服务
sudo yum install y postgresql14-server
#初始化数据库
sudo /usr/pgsql-14/bin/postgresql-14-setup initdb

#设置PostgreSQL服务为开机启动
sudo systemctl enable postgresql-14
#启动PostgreSQL服务
sudo systemctl start postgresql-14

PostgreSQL安装成功后会默认创建一个名为postgres的用户,初始化数据库后会有名为postgres的数据库来存储数据库的基础信息。例如用户信息等等,相当于MySQL中默认的名为mysql数据库。
postgres数据库中会初始化一名超级用户postgres为了方便我们使用postqres账号进行管理,我们可以修改该账号的密码

#进入命令行
su postgres
#启动SQL Shell
psql
#修改postgre账号密码
alter user postgres with password 'postgres';
#开启端口配置远程访问
sudo firewall-cmd --add-port=5432/tcp --permanent
sudo firewall-cmd --reload
#修改配置文件
vi /var/lib/pgsql/14/data/postgresql.conf
#将监听地址修改为*
#默认1isten_addresses配置是注释掉的,所以可以直接在配置文件开头加入该行
listen addresses='*'
允许所有IP访问
#修改配置文件
vi /var/lib/pgsq1/14/data/pg_hba.conf
#在尾部加入
host all all 0.0.0.0/0 md5
重启数据库
sudo systemctl restart postgresql-14

创建用户及配置权限

#查看所有用户和权限
\du
#创建用户并设置密码
CREATE USER '用户名' WITH PASSWORD '密码';
#修改用户密码
ALTER USER '用户名' WITH PASSWORD '密码';
#数据库授权,赋予指定账户指定数据库所有权限
GRANT ALL PRIVILEGES ON DATABASE '数据库名' To '用户名';
#但此时用户还是没有读写权限,需要继续授权表(这条sql语句必须在所要操作的数据库里执行)
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO xxx;
#移除指定账户指定数据库所有权限
REVOKE ALL PRIVILEGES ON DATABASE mydb from test;
#删除用户
drop user test;

#指定用户登录
psql -U '用户名' -d '要连接的数据库名'

表空间

使用CREATE TABLE语句创建新的表时,PostgreSQL帮我们完成了所有操作。包括更新系统表中的信息和在文件系统中生成相应的文件。
那么PostgreSQL怎么知道应该在什么位置创建系统文件呢?
答:PostgreSQL通过表空间(Tablespaces)来实现逻辑对象(表、索引等)与物理文件之间的映射。
那当我们查询表的数据时,它如何知道数据文件所在的物理位置呢?
答:创建数据库或者数据表(包括索引)的时候,可以为其指定一个表空间(tablespace)。表空间决定了这些对象在文件系统中的存储路径

在PostgreSQL中,表空间(tablespace)表示数据文件的存放目录,这些数据文件代表了数据库的对象,例如表或索引。
当我们访问表时,系统通过它所在的表空间定位到对应数据文件所在的位置。

  • 表空间的优点
    1、如果数据库集群所在的初始磁盘分区或磁盘卷的空间不足,又无法进行扩展,可以在其他分区上创建一个新的表空间以供使用。
    2、管理员可以根据数据库对象的使用统计优化系统的性能。
    例如,可以将访问频繁的索引存放到一个快速且可靠的磁盘上,比如昂贵的固态硬盘。与此同时,将很少使用或者对性能要求不高的归档数据表存储到廉价的低速磁盘上。

PostgreSQL 在集群初始化时将所有的数据文件和配置文件存储到它的数据目录中,通常是环境变量 PGDATA的值。默认创建了两个表空间:
pg_default,template1和template0默认的表空间,也是创建其他数据库时的默认表空间。对应的目录为PGDATA/base。
pg_global,用于存储一些集群级别的共享系统表(system catalogs),例如 pg_database、pg_control。对应的目录为PGDATA/global。

关于表空间相关的sql

#查看默认表空间
\db
#创建表空间 (表空间名称不能是pg_开头)
CREATE TABLESPACE '指定拥有者用户名' LOCATION '存储的磁盘地址';
#普通用户需要授予表空间上的对象创建权限才能使用该表空间。
GRANT CREATE ON TABLESPACE '表空间名称' To '用户名';
#创建表并指定对应表空间
建表语句  TABLESPACE '表空间名称';
#将表移动到指定表空间
ALTER TABLE IF EXISTS public.t1 SET TABLESPACE pg_default;

有一种情况当表空间所在的磁盘或空间不足或性能比较低想换表空间时

1、停止PostgreSQL服务器进程
2、移动文件系统的数据文件地址
mv /path/源目录 /path/指定目录
3、修改PGDATA/pg_tblspc目录中的符号链接文件(需要提前获取文件名),指向新的目录;
ln -snf /var/lib/pgsql/源地址 /var/lib/pgsq1/xxx/xxx/连接后地址
4、启动 PostgreSQL 服务器进程。

标签:PostgreSQL,postgres,数据库,基础,pg,MySQL,空间
From: https://www.cnblogs.com/Edehuag/p/18499494

相关文章

  • 基础数据结构(1)
    单链表与双链表的用处单链表单链表的存储:单链表的几种操作在表头插入一个数:先将这个数指向head指向的数,再将head指向这个数在表中的第k位后面插入一个数:先将这个数指向第k位指向的数,再将第k位指向这个数在表中删除一个数:让这个数直接指向下一个数的下一个数代码实现:/......
  • 鸿蒙编程江湖:并发编程基础与鸿蒙中的任务并发
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。并发编程是指在同一时间段内处理多个任......
  • [QT基础系列]按钮QPushButton
    按钮QPushButton属性和方法、案例文本可以获取和设置按钮上显示的文本//获取和设置按钮的文本QStringtext()constvoidsetText(constQString&text)图标可以获取和设置按钮上显示的图标//获取和设置按钮的图标QIconicon()constvoidsetIcon(constQIcon......
  • [QT基础系列]窗口QWidget
    QWidget所有窗口类的基类Qt中有3个窗口的基类:QWidget、QMainWindow、QDialog在创建Qt工程时,会让我们选择继承自哪一个窗口类其中,QMainWindow、QDialog都是继承自QWidge所有控件类的基类Qt中的控件类(按钮、输入框、单选框等)也属于窗口类它们的基类也是QWid......
  • [QT基础系列]标签QLabel
    标签QLabelQLabel是Qt中的标签类,通常用于显示提示性的文本,也可以显示图像文本可以获取和设置按钮上显示的文本//获取和设置显示的文本QStringtext()const;voidsetText(constQString&text);对齐方式用于设置标签中的内容在水平和垂直两个方向上的对齐方式......
  • 真题练习29-Word字处理-全国计算机等级考试一级计算机基础及MS Office应用考试【汪老
    第29组请根据题目要求,完成下列操作:在考生文件夹下打开文档word.docx,按照要求完成下列操作并以该文件名(word.docx)保存文档。1.将文中所有错词“北平”替换为“北京”;设置上、下页边距各为3厘米。2.将标题段文字(“2009年北京市中考招生计划低于10万人”)设置为蓝色(标准色)、三号......
  • Linux基础——虚机mysql库覆盖/usr/lib64/libcrypto.so.1.1.1f无法启动
    1、问题描述租户新增数据库mysql,手动覆盖/usr/lib64中的libcrypto.so.1.1.1f库文件,导致主机重启进入救援模式。 2、问题分析i.发现报错poweroff:errorwhileloadingsharedlibraries:libcrypto.so.1.1:cannotopensharedobjectfile:Nosuchfileordirectoryii.检......
  • 基于SpringBoot + Vue的《计算机基础》网上考试系统
    文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言......
  • 【Linux 从基础到进阶】实时性能监控与调优(Prometheus、Grafana)
    实时性能监控与调优(Prometheus、Grafana)在现代化运维中,实时性能监控和调优是保障系统稳定性和高效性的重要手段。通过实时的性能监控,运维人员可以快速发现系统瓶颈、异常负载和潜在的故障隐患。本文将介绍如何使用Prometheus和Grafana进行系统的实时性能监控,并进行性能调优......
  • java基础day04:方法(函数),练习
    一、Java中的方法(函数)1.定义方法也叫代码块,用于实现代码的封装,方便调用。主要目的是实现代码复用。2、方法和函数关系方法和函数的关系定义方法(面向对象)在类中定义的成员。也可以叫成员方法,属于类创建出来的对象的功能函数(面向过程)3、定义方法        ......