精通PostgreSQL:解锁高效数据库管理的十大必备技巧与最佳实践

news2024/12/25 13:06:08
  •  作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注
  •  座右铭:   云端筑梦,数据为翼,探索无限可能,引领云计算新纪元
  •  个人主页:团儿.-CSDN博客

目录

前言:

正文:

一.用户管理

1.创建账号

2.设置只读权限

3.设置可操作的数据库

4.授权可操作的模式和权限

-- 授权

-- 删除账号

二.模式 Schema

使用模式的优势:

语法格式如下:

创建和当前用户同名模式(schema)

自定义创建模式(schema)

查看数据库下的所有(schema)

三.数据库管理

查询所有数据库

创建数据库

删除数据库

四.表管理

建表模板语句

查询schema中所有表

创建表

创建自增序列

创建主键序列

根据已有表结构创建表

删除表

五.索引管理

创建索引

创建唯一索引

查看索引

执行sql脚本

方式一:先登录再执行

方式二:通过psql执行

导出数据到SQL文件


前言:

在当今数据驱动的时代,数据库作为信息系统的核心组件,其重要性不言而喻。PostgreSQL,作为一款功能强大、开源的对象-关系数据库管理系统(ORDBMS),凭借其卓越的稳定性、丰富的特性集、以及对高级功能的支持(如全文搜索、地理空间数据处理等),赢得了全球范围内众多开发者和企业的青睐。无论是初创公司还是大型企业,PostgreSQL都成为了他们构建复杂应用、处理海量数据、实现数据驱动决策的首选数据库之一。

然而,要充分发挥PostgreSQL的潜力,高效地进行数据库管理至关重要。数据库管理不仅涉及日常的运维任务,如备份恢复、性能调优、安全加固等,还涵盖了数据架构设计、查询优化、并发控制等深层次的技术挑战。对于数据库管理员(DBA)和开发者而言,掌握一套PostgreSQL的常用管理操作,不仅能够提升工作效率,还能确保数据库的稳定运行和高效性能,为业务的发展提供坚实的数据支撑。

本文旨在为广大PostgreSQL用户、数据库管理员及开发者提供一份实用的指南,详细介绍PostgreSQL的常用管理操作。从基础的数据库安装与配置,到进阶的性能调优与故障排查,再到高级的数据迁移与备份恢复策略,我们将一步步带你深入PostgreSQL的世界,让你能够轻松应对各种数据库管理挑战。


正文:

一.用户管理

1.创建账号

create user 用户名 password '密码';

2.设置只读权限

alter user 用户名 set default_transaction_read_only = on;

3.设置可操作的数据库

grant all on database 数据库名 to 用户名;


4.授权可操作的模式和权限

-- 授权

grant select on all tables in schema public to 用户名;

-- 删除账号

#撤回在public模式下的权限

revoke select on all tables in schema public from 用户名;

#撤回在information_schema模式下的权限

revoke select on all tables in schema information_schema from 用户名;

#撤回在pg_catalog模式下的权限

revoke select on all tables in schema pg_catalog from 用户名;

#撤回对数据库的操作权限

revoke all on database 数据库名 from 用户名;

#删除用户

drop user 用户名;


二.模式 Schema

PostgreSQL 模式SCHEMA 可以看着是一个表的集合。一个模式可以包含视图、索引、数据类型、函数和操作符等。

相同的对象名称可以被用于不同的模式中而不会出现冲突,例如 schema1 和 myschema 都可以包含名为 mytable 的表。

使用模式的优势:

允许多个用户使用一个数据库并且不会互相干扰。

将数据库对象组织成逻辑组以便更容易管理。

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

语法格式如下:

创建和当前用户同名模式(schema)

create schema AUTHORIZATION CURRENT_USER;

自定义创建模式(schema)

create schema 模式名称;

注意:如果不创建scheme,并且语句中不写scheme,则默认scheme使用内置的public。

查看数据库下的所有(schema)

select * from information_schema.schemata;


三.数据库管理

查询所有数据库

select datname from pg_database;

创建数据库

create database 数据库名 owner 所属用户 encoding UTF8;

注意:创建完数据库,需要切换到数据库下,创建和当前用户同名scheme,删除数据库后schema也会一并删除:

-- 重新登陆到新数据库下,执行如下语句

create schema AUTHORIZATION CURRENT_USER;

删除数据库

drop database 数据库名;

注意:删库前需要关闭所有会话,不然会提示:ERROR:  database "mydb" is being accessed by other users

关闭数据库所有会话

SELECT pg_terminate_backend(pg_stat_activity.pid)

FROM pg_stat_activity

WHERE datname='mydb' AND pid<>pg_backend_pid();


四.表管理

建表模板语句

create table "t_user" (

 "id" bigserial not null,

 "username" varchar (64) not null,

 "password" varchar (64) not null,

 "create_time" timestamp not null default current_timestamp,

 "update_time" timestamp not null default current_timestamp,

 constraint t_user_pk primary key (id)

);

comment on column "t_user"."id" is '主键';

comment on column "t_user"."username" is '用户名';

comment on column "t_user"."password" is '密码';

comment on column "t_user"."create_time" is '创建时间';

comment on column "t_user"."update_time" is '更新时间';

查询schema中所有表

select table_name from information_schema.tables where table_schema = 'myuser';

创建表

CREATE TABLE public.t_user (

  "id" BIGSERIAL NOT NULL,

  "username" VARCHAR(64) NOT NULL,

  "password" VARCHAR(64) NOT NULL,

  "create_time" TIMESTAMP(0) default CURRENT_TIMESTAMP not null,

  "update_time" TIMESTAMP(0) default CURRENT_TIMESTAMP not null

);

-- 注释

COMMENT ON TABLE public.t_user IS '用户表';

COMMENT ON COLUMN public.t_user.id IS '主键';

COMMENT ON COLUMN public.t_user.username IS '用户名';

COMMENT ON COLUMN public.t_user.password IS '密码';

COMMENT ON COLUMN public.t_user.create_time IS '创建时间';

COMMENT ON COLUMN public.t_user.update_time IS '更新时间';

创建自增序列

alter sequence "t_user_ID_seq" restart with 1 increment by 1;

创建主键序列

drop index if exists "t_user_pkey";

alter table "t_user" add constraint "t_user_pkey" primary key ("ID");

根据已有表结构创建表

create table if not exists 新表 (like 旧表 including indexes including comments including defaults);

删除表

drop table if exists "t_template" cascade;

五.索引管理

创建索引

drop index if exists t_user_username;

create index t_user_username on t_user (username);

创建唯一索引

drop index if exists t_user_username;

create index t_user_username on t_user (username);

查看索引

\d t_user

执行sql脚本

方式一:先登录再执行

\i testdb.sql

方式二:通过psql执行

psql -d testdb -U postgres -f /pathA/xxx.sql

导出数据到SQL文件

pg_dump -h localhost -p 5432 -U postgres --column-inserts -t table_name -f save_sql.sql database_name

--column-inserts #以带有列名的 `INSERT` 命令形式转储数据。

-t #只转储指定名称的表。

-f #指定输出文件或目录名。


期待您的关注~

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

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

相关文章

Leetcode 109.有序链表转换二叉搜索树(Medium)

给定一个单链表的头节点 head &#xff0c;其中的元素 按升序排序 &#xff0c;将其转换为 平衡 二叉搜索树。 示例 1: 输入: head [-10,-3,0,5,9] 输出: [0,-3,9,-10,null,5] 解释: 一个可能的答案是[0&#xff0c;-3,9&#xff0c;-10,null,5]&#xff0c;它表示所示的高度…

uni如何安装新依赖

如何在 uniapp 项目中&#xff0c;使用“插件市场” 的原生插件 插件市场 :DCloud 插件市场 1. 第一步&#xff1a; 首先在HBuilder x 中新建一个uniapp 项目&#xff0c;如果已建好 uniapp 项目则跳过该步骤。 2.第二步&#xff1a; 在 ”插件市场中 “ 选择你需要的原生插件…

微服务实战系列之玩转Docker(十四)

前言 时逢白露天骤变&#xff0c;细雨纷纷气渐凉&#xff0c;忽有故人心上过&#xff0c;回首山河已是秋。——碎碎念 当秋天来临的那一刻&#xff0c;你会想起故人么&#xff1f;此刻&#xff0c;突然一句唐诗——“故人具鸡黍&#xff0c;邀我去田家”&#xff0c;飘过了耳边…

CAN通信入门 - 1

CAN通信入门 - 1 CAN通信原理 参考链接&#xff1a;CAN总线原理 CAN总线信号为差分信号&#xff0c;其有2根总线分别为CAN-L\CAN-H。 CAN总线之间的电平分为显性电平和隐性电平&#xff0c;其中显性电平对应的是逻辑0&#xff0c;隐性电平对应的是逻辑1。当CAN差分信号为0V时…

【Web】骨架屏

文章目录 概述骨架屏的实现方案page-skeleton-webpack-plugin安装基本使用 来源 概述 骨架屏&#xff08;Skeleton Screen&#xff09;是一种在页面数据加载完成前&#xff0c;先给用户展示出页面的大致结构&#xff08;灰色占位图&#xff09;的技术。当页面实际数据加载并渲…

【话费充值】话费API接口对接有哪些关键步骤

话费API接口对接通常包括以下几个关键步骤&#xff1a; 选择服务提供商&#xff1a;选择一个可靠的话费充值API服务提供商&#xff0c;这可能是电信运营商本身或是一个信誉良好的第三方服务提供商。注册和认证&#xff1a;在选定的服务提供商平台上注册&#xff0c;并获得API访…

自研商家如何快速接入电商平台订单数据?

随着电子商务行业的快速发展&#xff0c;越来越多的商家开始寻求高效的订单管理和数据整合方案。对于那些自研系统的商家来说&#xff0c;如何实现与各大电商平台之间的无缝对接&#xff0c;成为了一项重要挑战。点三电商API正是为此类需求量身打造&#xff0c;为商家提供了一站…

【动态规划】任务调度dp 自用

kkksc03考前临时抱佛脚 原题 题目背景 kkksc03 的大学生活非常的颓废&#xff0c;平时根本不学习。但是&#xff0c;临近期末考试&#xff0c;他必须要开始抱佛脚&#xff0c;以求不挂科。 题目描述 这次期末考试&#xff0c;kkksc03 需要考 4 4 4 科。因此要开始刷习题集…

晶体晶格热导率的快速可解公式

https://doi.org/10.1016/j.mtphys.2024.101549 晶格热导率(κL)是晶体的一项重要物理性质&#xff0c;在热管理中具有广泛的应用&#xff0c;如散热、绝缘和热电能量转换。 然而&#xff0c;准确、快速地测定κL带来了相当大的挑战。 在这项研究中&#xff0c;引入了一个公式…

计算、谋算(算计)与逻辑

谋算的“逻辑”和计算的逻辑既相似又有区别。 谋算的逻辑通常涉及到策略、计划和决策的制定。它关注的是如何在不确定的情况下&#xff0c;通过分析和推理来达到目标。谋算者会考虑各种可能性&#xff08;01&#xff09;、风险&#xff08;0&#xff09;和利益&#xff08;1&am…

【鸿蒙应用开发】常见的容器组件:ColumnSplit、RowSplit和Flex

上一章已经了解了Column和Row的一些属性&#xff0c;以下是几个案例&#xff1a; 设置子组件水平方向的间距为&#xff1a;5 Entry Preview Component struct Index {State message: string Hello 鸿蒙;controller: webview.WebviewController new webview.WebviewControll…

【Java】Runtime与Properties获取系统信息

Java系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 文章目录 Java系列文章目录一、前言二、学习内容&#xff1a;三、问题描述四、解决方案&#xff1a;4.1 代码4.2 运行结果 五、总结&#xff1a; 一、前言 这些都被淘汰比较少用了…

深入研究基于多层卷积和全连接网络结构的数据处理与特征提取方法

1 问题 卷积层的输入输出的shape的计算公式探究多个卷积层加上多个全连接层的输出方法 2 方法 卷积层的输入输出的shape的计算公式&#xff1a;输出形状的计算公式&#xff1a;输出高度 (输入高度 - 卷积核高度 2 * 填充) / 步长 1输出宽度 (输入宽度 - 卷积核宽度 2 * 填…

一码空传临时网盘PHP源码,支持提取码功能

源码介绍 一码空传临时网盘源码V2.0免费授权&#xff0c;该源码提供了一个简单易用的无数据库版临时网盘解决方案。前端采用了layui开发框架&#xff0c;后端使用原生PHP编写&#xff0c;没有引入任何开发框架&#xff0c;保持了代码的简洁和高效。 这个程序使用了一个无数据…

设计模式 装饰模式(Decorator Pattern)

装饰器模式简绍 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。这种类型的设计模式属于结构型模式&#xff0c;它是作为现有的类的一个包装。 装饰器模式的基本结构 装饰器模式的基本结构如下&…

【数据管理】DAMA-数据安全

目录 1、概述 2、数据安全要求来源 3、业务驱动因素 4、目标和原则 5、脆弱性、威胁、风险 6、风险分类 7、安全过程 8、数据完整性 9、混淆或脱敏 10、数据安全类型 11、数据安全制约因素 12、系统安全风险 13、工具 1、概述 数据安全包括安全策略和过程的规划、…

无人机动力系统设计之电调芯片参数选型

无人机动力系统设计之电调芯片参数选型 1. 源由2. 关键因素2.1 电压范围2.2 电流处理能力2.3 控制方式2.4 PWM输出与分辨率2.5 通讯接口2.6 保护功能2.7 支持霍尔传感器与无传感器模式2.8 集成度与外围器件2.9 效率与散热2.10 市场供应与成本 3. 因素阐述3.1 PWM工作频率3.1.1 …

二次规划及其MATLAB实现

引言 二次规划&#xff08;Quadratic Programming, QP&#xff09;是一类重要的优化问题&#xff0c;其目标函数为二次函数&#xff0c;约束条件为线性不等式或等式。二次规划问题在工程、经济、金融等领域有广泛应用&#xff0c;如投资组合优化、人脸表情动画的权重求解、机械…

UE中如何制作后处理设置面板

1&#xff09;UE中如何制作后处理设置面板 2&#xff09;Magica Clothes 2插件与Burst编译问题 3&#xff09;UI大小和文本变量 4&#xff09;如何检索直线与网格的所有交点 这是第399篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&#xff0c;涵盖了UWA问答、社…

tabBar设置底部菜单选项以及iconfont图标,setTabBar设置TabBar和下拉刷新API

tabBartabBar属性:设置底部 tab 的表现 ​ ​ ​ ​ 首先在pages.json页面写一个tabBar对象,里面放入list对象数组,里面至少要有2个、最多5个 tab, 如果只有一个tab的话,H5(浏览器)依然可以显示底部有一个导航栏,如果没有,需要重启后才有,小程序则报错,只有2个以上才可以…