PostgreSQL 快速入门与实战

news2024/11/24 3:04:30

1、概述

        前面2篇博客给大家详细的介绍了PostgreSQL的安装和配置,本篇文章就带着大家一起学习一下PostgreSQL的用法,主要内容包括 基本的数据库操作、用户管理、数据备份、SCHEMA(模式)以及和MySQL的区别。

2、数据库基本操作

PostgreSQL是严格遵守SQL规范的,在SQL的标准实现上比MySQL更加完善,所以日常使用的语法基本上都是一样的,这里重点给大家介绍和MySQL不同的操作

2.1、登录数据库

##  默认用户登录  
./psql

## 非默认用户
## psql -h ip地址 -U 用户名 -d 数据库 -p 端口
## 举例  jerry 用户 登录到 192.168.200.19  端口是 8800  数据库是 shop 
psql -h 192.168.200.19 -U jerry  -d shop -p 8800

需要注意的是 psql指令不带参数的时候 默认的用户和数据库都是postgres  

2.2、数据库操作

数据库相关操作如下

## 创建数据库
create database shop;

## 查看所有数据库
\l

## 切换当前数据库
\c shop

##  删除数据库
drop database shop 

2.3、表操作

我们先准备以下脚本,然后在控制台执行

create table my_test(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  VARCHAR (25),
	PRIMARY KEY (ID)
);

我们使用 \d 可以查看当前用户下所有的表信息,这里大家可以使用idea工具连接一下

 我们可以看到这张表建到了 postgres 库的public 模式下了。

这里需要给大家说一下模式的概念,我们如果直接建表不指定Schema(模式名),就默认会在public模式下, 后续章节会给大家详细的介绍。

我们已经用postgres用户在postgres库下面新建了一张my_test 的表,这张表归属在public模式下。那么我们如果要在shop库新建表需要怎么操作呢,首先肯定需要切数据库,具体操作如下

我们可以使用 \c 加数据库名  来切换数据库

 这个时候我们就将这张表创建在了shop库的public模式下了。我们可以使用 \d + 表名  来查看表结构

这里给大家分别介绍了数据库和表的几个基本的操作,其实 PostgreSQL大部分操作和 MySQL都是一样的,这里给大家介绍的都是和MySQL不同的几个操作,先来总结一下:

## 查看数据库
\l
## 切换数据库
\c dbName
## 查看表  和查看表结构
\d <tableName> 
## 退出
\q

3、用户管理

3.1、添加用户

       我们先启动pg的服务,然后切换到postgres用户,使用该用户登录到pg的服务端,相关命令如下

###启动服务
./startup-pg start

## 进入bin目录
cd /usr/local/postgresql-16.3/bin

## 切换用户
su postgres 

## 登录到pg
./psql

登陆成功后的界面如下所示: 

下面我们来创建一个用户名叫tom的用户,并设置他的密码是tom123

返回了一个CREATE ROLE 说明这个用户创建成功了,其实我们也可以使用 CREATE ROLE指令来创建一个用户,比如我们接下来继续创建一个名为jerry的用户

也是可以的,在pg中这两条指令都可以用来创建用户,他们的区别是 CREATE USER 命令创建的用户默认带有LOGIN属性,也就是具备登录的权限

3.2、角色管理

        我们上面创建了tom和jerry两个用户,我们可以使用 \du 指令来查看相关的用户信息

我们可以看到 jerry 这个用户后面有个属性说明  Cannot login。也就是说jerry这个用户不具备登陆的权限,我们必须要给 jerry 这个角色赋予登录的属性(权限),修改角色权限的指令我们可以使用ALTER ROLE

可以看到 tom和jerry两个角色都具备登录的权限了。其实在PG中用户就等价于角色加上属性(权限)。我们也可以使用ALTER ROLE去修改一个已经存在的角色的属性。我们给jerry用户添加一个创建数据的属性(权限)

下面我们登录一下 jerry 用户,相关命令如下

 ./psql  -h 127.0.0.1 -U jerry  -d shop -p 5432

接着创建一个数据库 jerry_db 

我们可以看到这个数据库的Owner 是jerry。

3.3、 对等认证

之前在使用postgres用户登录的时候我们发现直接可以使用psql 就可以了,这是因为postgreSQL有一种认证方式 peer,它允许操作系统的同名用户直接使用psql指令就能登录,但是仅限于postgreSQL安装的主机上使用,具体描述大家可参见官方文档的第21章节PostgreSQL: Documentation: 16: 21.9. Peer Authentication

我们可以在pg中创建一个 trump  的用户,不设置密码

接着我们退出psql,在主机上也创建一个trump 用户 也不设置密码

我们在切换到trump用户登录的时候发现报错了,报错信息提示 数据库 trump 不存在,好吧 这里我们需要指定具体的数据库。之所以postgres用户没报错 是因为默认有一个postgres的数据库。

带上数据库,我们发现成功了,需要注意的是这种登录方式一般很少使用的,这里仅仅只是给大家介绍pg的一些特性,我们主要的登录方式还是通过用户名和密码登录的

4、Schema(模式)

4.1、基本概念

 在postgreSQL中有一个比较重要的概念叫 schema,官方文档中第5章节有关于模式的具体说明https://www.postgresql.org/docs/16/ddl-schemas.html

这里我个人的理解是 模式相当于数据库里面的一个逻辑上的"子数据库",我们来看官方文档上的示意,

我们从上述内容中可以知道以下几点内容

1、一个数据库可以有 一个或者多个模式

2、模式中包含了 表、数据类型、函数以及操作符 

3、模式不是严格的隔离

4、一个用户可以访问它所连接的数据库下所有模式,但是需要具备对应的权限

关于这几点我们可以知道模式大概的样子应该是这样的

4.2、Schema相关操作

好了,相关的概念相信大家清楚了,下面我们来实操一下

## 创建数据库
create database tianlongbabu;
## 切换数据库
\c tianlongbabu;
## 创建模式
create schema gaibang;

create schema shaolin;

## 创建表
create table gaibang.user (
   id  INT              NOT NULL,
   user_name  VARCHAR (20)     NOT NULL,
   age INT              NOT NULL,
   face_value VARCHAR (25),
	PRIMARY KEY (id)
);

create table shaolin.user (
   id  INT              NOT NULL,
   user_name  VARCHAR (20)     NOT NULL,
   age INT              NOT NULL,
   face_value VARCHAR (25),
	PRIMARY KEY (id)
);

 上述命令我们新建了一个数据库 tianlongbabu 然后在这个数据库中新建了一个 gaibang 和shaolin的schema,并且分别在这两个schema里面创建了user 表。你可能会好奇同一个数据库里为什么可以创建同名表,到这里相信你也知道 肯定就是和 schema有关了。

好了 我们可以使用下面的语句查询一下schema信息 

SELECT nspname AS schema_name   
FROM pg_namespace  
WHERE nspname !~ '^pg_' AND nspname <> 'information_schema';

我们可以打开 idea 通过图形界面的方式查看一下

我们可以看到tianlongbabu库下面组织了4个schema,其中 shaolin和gaibang是我们自己创建的。

好了,关于schema 出现的原因 官方文档上给出了几点说明

1、允许多个用户使用一个数据库,各自使用单独的schema

2、将数据库对象组织成逻辑组,使其更易于管理。

3、第三方应用程序可以放在单独的模式中,这样它们就不会与其他对象的名称发生冲突

就类似上述案例中的gaibang和shaolin都有一个user表,我们可以创建2个用户 可以使用共同使用tianlongbabu这个数据库,两个用户使用各自的schema 这样就不回相互产生影响了。需要注意的是模式不能嵌套

 4.3、相关命令总结

## 创建模式
create schema schema_name

## 删除模式
drop schema schema_name

## 删除模式并且删除该模式下的数据对象
drop schema schema_name cascade

5、数据备份 

数据备份是一个关系型数据库必不可少的一个功能,postgreSQL 同样也具备快速数据备份的能力。我们首先在前面创建的表中添加几条数据

INSERT INTO gaibang."user" (id, user_name, age, face_value) VALUES (1, '乔峰', 35, '100');
INSERT INTO gaibang."user" (id, user_name, age, face_value) VALUES (2, '白世镜', 45, '46');
INSERT INTO gaibang."user" (id, user_name, age, face_value) VALUES (3, '吴长青', 59, '45');
INSERT INTO gaibang."user" (id, user_name, age, face_value) VALUES (4, '康敏', 28, '50');
INSERT INTO gaibang."user" (id, user_name, age, face_value) VALUES (5, '马大元', 40, '50');
INSERT INTO gaibang."user" (id, user_name, age, face_value) VALUES (6, '宋长老', 60, '48');


INSERT INTO shaolin."user" (id, user_name, age, face_value) VALUES (1, '玄苦大师', 70, '80');
INSERT INTO shaolin."user" (id, user_name, age, face_value) VALUES (2, '虚竹', 23, '99');
INSERT INTO shaolin."user" (id, user_name, age, face_value) VALUES (3, '玄难大师', 72, '88');
INSERT INTO shaolin."user" (id, user_name, age, face_value) VALUES (4, '玄悲大师', 71, '90');
INSERT INTO shaolin."user" (id, user_name, age, face_value) VALUES (5, '扫地僧', 90, '101');

添加上述数据后 我们可以查看一下,确认无误后 我们回到主机上,我们先到安装目录的bin目录下

## 来到目录下
cd /usr/local/postgresql-16.3/bin

## 切换用户
su postgres 

## 备份数据
./pg_dump tianlongbabu > tianlongbabu.sql
## 或者
./pg_dump tianlongbabu > tianlongbabu.bak

这样 就可能将数据库tianlongbabu整库备份了,其中sql文件和bak文件的区别是 sql是明文,bak是压缩二进制格式的文件。备份好了之后我们就可以删掉数据库

我们删掉tianlongbabu之后 我们再来恢复

## 创建数据库
create database tianlongbabu;

## 恢复数据
./psql tianlongbabu < tianlongbabu.sql 

我们发现数据已经恢复了。需要注意的是命令一般只能单库备份,如果我们需要备份多个数据库我们可以使用 pg_dumpall  这个指令

6、PostgreSQL和MySQL

PostgreSQL和MySQL实现上存在很多差异,这里给大家介绍他们在组织表的方式上的差异。以下是关于这两种数据库管理系统组织表的方式的详细比对

1、PostgreSQL

  1. 堆表结构
    • PostgreSQL使用堆表结构来存储数据。这意味着数据按照其插入的顺序进行存储,并不按照任何特定的顺序(如主键顺序)进行排序。
    • 每个文件由多个块组成,块是物理磁盘中的存储单位。块由四个主要部分组成:块头(PageHeaderData)、记录(包括Linp和Tuple)、空闲空间(Freespace)和特定数据(Special space)。
    • Linp:是ItemIdData类型,长度固定,在块中从前向后分配。每个ItemIdData都记录了一个偏移,用于指向Tuple。
    • Tuple:是记录的头信息,与记录本身一起构成完整的记录。记录本身长度不固定,在块中从后向前分配。
    • Freespace:位于Linp和Tuple之间,用于存储未分配的空间(空闲空间)。新插入页面中的元组即对应的项标识符将从这部分空间中来分配。
    • Special space:用于存放与索引方法相关的特定数据。但在普通表文件块中并没有使用,其内容被置为空。
  2. 表空间
    • PostgreSQL支持表空间的概念,可以将表、索引、物化视图等物理对象进行分组并存储到不同的物理位置,从而提升I/O能力。

2、MySQL(InnoDB存储引擎)

  1. 索引组织表
    • 在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表。
    • 如果在创建表时没有显式定义主键,InnoDB存储引擎会按照一定规则选择或创建主键。
  2. 逻辑存储结构
    • InnoDB存储引擎的逻辑存储结构包括表空间、段(segment)、区(extent)和页(page)。
    • 表空间:所有数据都被逻辑地存放在一个表空间中。
    • :表空间由各个段组成,常见的段有数据段、索引段、回滚段等。
    • :在任何情况下每个区的大小都为1MB。InnoDB存储引擎一次从磁盘申请4-5个区,以保证区中页的连续性。
    • :页是InnoDB磁盘管理的最小单位,默认每个页的大小为16KB。B+树索引本身并不能找到具体的一条记录,能找到的只是该记录所在的页。
  3. 存储引擎
    • MySQL支持多种存储引擎,每种存储引擎都有其独特的组织表的方式。InnoDB是其中最常用的存储引擎之一,它采用索引组织表的方式。

总结来说,PostgreSQL和MySQL在组织表的方式上存在明显的差异。PostgreSQL使用堆表结构,并通过表空间的概念提供了灵活的物理存储管理。而MySQL(InnoDB存储引擎)则采用索引组织表的方式,将数据按照主键顺序进行存储,并通过逻辑存储结构(表空间、段、区和页)来管理数据。

相信大家已经了解到了这两款数据库底层组织表的方式以及使用的数据结构了,至于具体的选型大家可以根据自己的业务场景进行综合评估。本次教程就先到这里了,希望对大家有所帮助

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

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

相关文章

C# Winform内嵌窗体(在主窗体上显示子窗体)

在开发Winform项目中&#xff0c;经常会要切换不同的窗体。通常程序都有一个主窗体&#xff0c;在切换窗体时往往需要关闭其他子窗体&#xff0c;这个实例就来介绍MDI主窗体内嵌子窗体的实现方法。 MDI主窗体要设置一个比较重要的属性&#xff0c;IsMdiContainertrue。子窗体的…

boost asio异步服务器(3)增加发送队列实现全双工通信

增加发送节点 构造发送节点&#xff0c;管理发送数据。发送节点的类如下。 这个发送节点用于保证发送和接收数据的有效性。 增加发送队列 前边实现的是一个简单的echo服务器&#xff0c;也就是服务器将收到的内容发送给对应的客户端。但是在实际的服务器设计中&#xff0c;服务…

苹果WWDC 2024 带来的 AI 风暴:从生产力工具到个人助理,AI 将如何融入我们的生活?

2024年6月5日&#xff0c;苹果WWDC 2024全球开发者大会如约而至&#xff0c;带来了众多令人兴奋的新功能和新产品。其中&#xff0c;AI 技术的全面融入无疑是最引人注目的亮点。从 iOS、iPadOS 到 macOS&#xff0c;再到 Siri 和开发者工具&#xff0c;苹果正在将 AI 融入到其生…

数字孪生技术推动希腊水务系统的技术进步

OpenFlows 提供的数字孪生技术将科扎尼供水渗漏的响应时间缩短了 50% 引领希腊供水管理改革 新冠疫情之后&#xff0c;希腊制定国家经济复苏计划&#xff0c;旨在推动能源改革、数字化和现代化&#xff0c;作为计划的一部分&#xff0c;希腊正试图实现可持续的给排水管理&…

Qt | openSSL将TCP数据进行不对称(RSA)加密传输-windows平台实操(可行)

01、windows平台工具准备 QtQt5.14.2openSSL下载(选择适合自己的版本即可)https://slproweb.com/products/Win32OpenSSL.htmlTCP调试助手调试助手02、简介 首先简单介绍一下openssl。接着描述如何在windo

龙芯+RT-Thread+LVGL实战笔记(36)——密码锁完善

【写在前面】不知不觉中,又临近学期末了。这个学期,因为一些特殊原因,一直没怎么更新本教程,而且不得已上调了本教程的价格,在此笔者深表歉意。另一方面,自己带的学生发挥不佳,很遗憾未能闯进国赛,为此笔者也郁闷了相当长一段时间。事已至此,也只能慢慢释然,来年再战…

AI网络爬虫:批量爬取AI导航网站Futurepedia数据

Futurepedia致力于使AI技术对各行各业的专业人士更加可理解和实用&#xff0c;提供全面的AI网站和工具目录、易于遵循的指南、每周新闻通讯和信息丰富的YouTube频道&#xff0c;简化AI在专业实践中的整合。如何把Futurepedia上的全部AI网站数据爬取下来呢&#xff1f; 网站一页…

[大模型]LLaMA3-8B-Instruct langchain 接入

环境准备 在 Autodl 平台中租赁一个 3090 等 24G 显存的显卡机器&#xff0c;如下图所示镜像选择 PyTorch-->2.1.0-->3.10(ubuntu22.04)-->12.1 接下来打开刚刚租用服务器的 JupyterLab&#xff0c;并且打开其中的终端开始环境配置、模型下载和运行演示。 pip 换…

一款优秀的下载和共享工具

一、简介 1、它以舒适和快速的方式下载Internet文件&#xff0c;同时支持断点续传和嗅探视频音频的功能。 它具有站点抓取、批量下载队列和计划任务下载等功能&#xff0c;可以接管所有浏览器的下载任务&#xff0c;包括Edge&#xff0c;Firefox和Chrome等主流浏览器。 对于用…

MAC认证

简介 MAC认证是一种基于接口和MAC地址对用户的网络访问权限进行控制的认证方法&#xff0c;它不需要用户安装任何客户端软件。设备在启动了MAC认证的接口上首次检测到用户的MAC地址以后&#xff0c;即启动对该用户的认证操作。认证过程中&#xff0c;不需要用户手动输入用户名…

基于构件开发模型-系统架构师(八)

1、把应用程序中应用最频繁的那部分核心程序作为评价计算机性能的标准程序&#xff0c;称为&#xff08;&#xff09;程序。 A仿真测试 B核心测试 C基准测试 D标准测试 解析&#xff1a; 系统测试最核心的部分内容&#xff0c;基准测试。 2、运用信息技术进行知识的挖掘和…

修改注册表默认端口号;telnet端口号失败、不通、没反应;访问另一机器端口不通

背景&#xff1a;在多集群项目中&#xff0c;发现访问其他机器不通。遂使用telnet命令试试&#xff0c;确实端口不通。也查看了防火墙策略等&#xff0c;最后尝试了修改注册表默认端口号。这样端口可通了。但并未实际解决问题&#xff0c;在实际项目中需要确认一下你实际项目中…

使用 FormCreate 快速创建仿真页面

在现代前端开发中&#xff0c;快速创建和迭代仿真页面是提高开发效率和用户体验的关键。FormCreate 是一个强大的工具&#xff0c;它通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的表单组件&#xff0c;支持多种 UI 框架。本文将介绍如何使用 FormCreate 快速创建一个…

C++初阶学习第六弹——探索STL奥秘(一)——标准库中的string类

前言&#xff1a; 在前面&#xff0c;我们学习了C的类与对象&#xff0c;认识到了C与C语言的一些不同&#xff0c;今天&#xff0c;我们将进入C的 关键部分——STL&#xff0c;学习完这部分之后&#xff0c;我们就可以清楚的认识到C相比于C语言的快捷与便利 目录 一、为什么有s…

Docker笔记-Debian容器内搭建ssh服务

登陆容器之后修改密码&#xff1a; passwd 密码设置完成后安装openssh-server apt-get install openssh-server 修改端口号为50022并添加配置 vim /etc/ssh/sshd_config 修改成 Port 50022 PasswordAuthentication yes PermitRootLogin yes 启动 rootlinux:~# /etc/in…

C#完整服务器

控件&#xff1a;三个按钮&#xff0c;输入框&#xff0c;文件框(richTextBox) 打开服务器按钮方法 Socket socket;// 服务器对象Dictionary<string,Socket> dic new Dictionary<string,Socket>();// 存储客户端对象// 打开服务器private void button1_Click(obje…

优思学院|用ChatGPT快速完成数据分析图表【柏累托图法】

数据分析是很多行业的人不可少的一部分&#xff0c;尤其是质量工程师更是日常的工作。然而&#xff0c;随着科技的进步&#xff0c;人工智能&#xff08;AI&#xff09;将逐渐承担起数据计算的工作&#xff0c;这意味着未来的质量工程师需要具备的不仅仅是计算能力&#xff0c;…

小目标检测篇 | YOLOv8改进之空间上下文感知模块SCAM + 超轻量高效动态上采样DySample

前言:Hello大家好,我是小哥谈。小目标检测是计算机视觉领域中的一个研究方向,旨在从图像或视频中准确地检测和定位尺寸较小的目标物体。相比于常规目标检测任务,小目标检测更具挑战性,因为小目标通常具有低分辨率、低对比度和模糊等特点,容易被背景干扰或遮挡。本篇文章就…

LLM基础介绍

文章目录 一、语言模型1、概念2、预训练语言模型3、NLP4、benchmark1&#xff09;概念2&#xff09;GLUE 5、TPU6、语料 二、神经网络1、概念2、训练神经网络3、案例&#xff1a;word2vec3、RNN&#xff08;循环神经网络&#xff09;4、GRU5、LSTM&#xff08;长短时记忆网络&a…

探索GPT-4V在学术领域的应用——无需编程即可阅读和理解科学论文

1. 概述 论文地址&#xff1a;https://arxiv.org/pdf/2312.05468.pdf 随着人工智能潜力的不断扩大&#xff0c;人工智能&#xff08;AI&#xff09;在化学领域的应用也在迅速发展。特别是大规模语言模型的出现&#xff0c;极大地扩展了人工智能在化学研究中的作用。由于这些模…