30个实用SQL语句,玩转PostgreSQL

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: PostgreSQL是一款功能非常强大的开源关系型数据库,本文主要整理总结了30个实用SQL,方便大家可以高效利用PostgreSQL。

引言

PostgreSQL是一款功能非常强大的开源关系型数据库,它支持哈希索引、反向索引、部分索引、Expression 索引、GiST、GIN等多种索引模式,同时可安装功能丰富的扩展包。相较于Mysql,PostgreSQ支持通过PostGIS扩展支持地理空间数据、支持嵌套循环,哈希连接,排序合并三种表连接方式等一系列的强化功能。本文主要整理总结了30个实用SQL,方便大家可以高效利用PostgreSQL。


实用SQL语句

一、数据库连接

1、获取数据库实例连接数

selectcount(*)from pg_stat_activity;

2、获取数据库最大连接数

show max_connections

3、查询当前连接数详细信息

select*from pg_stat_activity;

4、查询数据库中各个用户名对应的数据库连接数


select usename, count(*) from pg_stat_activity group by usename;

二、赋权操作

1、为指定用户赋予指定表的select权限

GRANT SELECTON table_name TO username;


2、修改数据库表所属的ownner

altertable table_name owner to username;

3、授予指定用户指定表的所有权限

grant all privileges ontable product to username

4、授予指定用户所有表的所有权限

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO username;

三、数据库表或者索引


1、获取数据库表中的索引

select*from pg_indexes where tablename ='product';

select * from pg_indexes where tablename = 'product';

2、获取当前db中所有表信息

select*from pg_tables;


3、查询数据库安装了哪些扩展

select*from pg_extension;


4、查询数据库中的所有表及其描述

select relname as TABLE_NAME ,col_description(c.oid,0)as COMMENTS from pg_class c where relkind ='r'and relname notlike'pg_%'and relname notlike'sql_%'


四、获取数据大小

1、查询执行数据库大小

select pg_size_pretty (pg_database_size('db_product'));



2、查询数据库实例当中各个数据库大小

select datname, pg_size_pretty (pg_database_size(datname))AS size from pg_database;


3、查询单表数据大小

select pg_size_pretty(pg_relation_size('table_name'))as size;


4、查询数据库表包括索引的

select pg_size_pretty(pg_total_relation_size('table_name'))as size;


5、查看表中索引大小

select pg_size_pretty(pg_indexes_size('table_name'));


6、获取各个表中的数据记录数

select relname as TABLE_NAME, reltuples as rowCounts from pg_class where relkind ='r'orderby rowCounts desc


7、查看数据库表对应的数据文件

select pg_relation_filepath('product');


五、数据库分析

1、查看数据库实例的版本

select version();


2、查看最新加载配置的时间

select pg_conf_load_time();


3、查看当前wal的buffer中有多少字节没有写入到磁盘中

select pg_xlog_location_diff(pg_current_xlog_insert_location(),pg_current_xlog_location());


4、查询最耗时的5个sql

select*from pg_stat_statements orderby total_time desclimit5;

备注:需要开启pg_stat_statements


5、获取执行时间最慢的3条SQL,并给出CPU占用比例

SELECT substring(query,1,1000)AS short_query,round(total_time::numeric,2)AS total_time,calls,round((100* total_time / sum(total_time::numeric) OVER ())::numeric,2)AS percentage_cpu
FROM pg_stat_statements
ORDERBY total_time DESCLIMIT3;


6、分析评估SQL执行情况

EXPLAIN ANALYZE SELECT*FROM product


7、查看当前长时间执行却不结束的SQL

select datname, usename, client_addr, application_name, state, backend_start, xact_start, xact_stay, query_start, query_stay, replace(query, chr(10),' ')as query from(select pgsa.datnameas datname, pgsa.usenameas usename, pgsa.client_addr client_addr, pgsa.application_nameas application_name, pgsa.stateas state, pgsa.backend_startas backend_start, pgsa.xact_startas xact_start, extract(epoch from(now()- pgsa.xact_start))as xact_stay, pgsa.query_startas query_start, extract(epoch from(now()- pgsa.query_start))as query_stay , pgsa.queryas query from pg_stat_activity as pgsa where pgsa.state!='idle'and pgsa.state!='idle in transaction'and pgsa.state!='idle in transaction (aborted)') idleconnections orderby query_stay desclimit5;


8、查出使用表扫描最多的表

select*from pg_stat_user_tables where n_live_tup >100000and seq_scan >0orderby seq_tup_read desclimit10;


9、查询读取buffer最多的5个SQL

select*from pg_stat_statements orderby shared_blks_hit+shared_blks_read desclimit5;


10、获取数据库当前的回滚事务数以及死锁数

select datname,xact_rollback,deadlocks from pg_stat_database

11、查询指定表的慢查询

select*from pg_stat_activity where query ilike '%<table_name>%'and query_start - now()> interval '10 seconds';


六、数据库备份

1、备份postgres库并tar打包

pg_dump -h 127.0.0.1-p 5432-U postgres -f postgres.sql.tar-Ft

2、备份postgres库,转储数据为带列名的INSERT命令

pg_dumpall -d postgres -U postgres -f postgres.sql--column-inserts

总结

本文主要针对PostgreSQL数据库中在日常开发中比较常用的SQL进行了分类的总结,那么大家日常开发工作中,可以在分析数据库性能、数据库连接情况、sql执行情况等方面都有对应的SQL语句来进行支撑。


创作不易,如果各位同学觉得文章还不错的话,麻烦点赞+收藏+评论交流哦。老样子,文末和大家分享一首诗词。


临江仙·送钱穆父

一别都门三改火,天涯踏尽红尘。依然一笑作春温。无波真古井,有节是秋筠。


惆怅孤帆连夜发,送行淡月微云。樽前不用翠眉颦。人生如逆旅,我亦是行人。


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
6月前
|
SQL 人工智能 关系型数据库
PostgreSQL 常用SQL(持续更新...)
PostgreSQL 常用SQL(持续更新...)
|
6月前
|
SQL 关系型数据库 数据库
实时计算 Flink版操作报错之使用SQL 将 PostgreSQL 的 date 类型字段转换为 TIMESTAMP 类型时遇到报错,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
2月前
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
|
3月前
|
SQL 存储 关系型数据库
PostgreSQL核心之SQL基础学习
PostgreSQL核心之SQL基础学习
45 3
|
3月前
|
SQL 安全 关系型数据库
PostgreSQL SQL注入漏洞(CVE-2018-10915)--处理
【8月更文挑战第8天】漏洞描述:PostgreSQL是一款自由的对象关系型数据库管理系统,支持多种SQL标准及特性。存在SQL注入漏洞,源于应用未有效验证外部输入的SQL语句,允许攻击者执行非法命令。受影响版本包括10.5及更早版本等。解决方法为升级PostgreSQL
264 2
|
3月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
376 0
|
5月前
|
SQL 关系型数据库 数据库
nacos 2.2.3版本 查看配置文件的历史版本的接口 是针对MySQL数据库的sql 改成postgresql后 sql语句报错 该怎么解决
在Nacos 2.2.3中切换到PostgreSQL后,执行配置文件历史版本分页查询出错,因`LIMIT 0, 10`语法不被PostgreSQL支持,需改为`LIMIT 10 OFFSET 0`。仅当存在历史版本时报错。解决方案是调整查询SQL以兼容PostgreSQL语法。
|
5月前
|
SQL 关系型数据库 PostgreSQL
【sql】PostgreSQL物化视图表使用案例
【sql】PostgreSQL物化视图表使用案例
54 0
|
5月前
|
SQL Oracle 关系型数据库
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
74 0
|
6月前
|
SQL 关系型数据库 数据库
SQL 42501: Postgresql查询中的权限不足错误
SQL 42501: Postgresql查询中的权限不足错误
446 0