轻松拿下PostgreSQL,这30个实用SQL语句你细品

这篇具有很好参考价值的文章主要介绍了轻松拿下PostgreSQL,这30个实用SQL语句你细品。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

轻松拿下PostgreSQL,这30个实用SQL语句你细品

引言

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

 文章来源地址https://www.toymoban.com/news/detail-423421.html

一、数据库连接

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

select count(*) 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 SELECT ON table_name TO username;

 

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

alter table table_name owner to username;

 

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

grant all privileges on table product to username;

 

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

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

 

三、数据库表或者索引

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

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 not like 'pg_%' and relname not like '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('product')) as size;

 

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

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

 

5、查看表中索引大小

select pg_size_pretty(pg_indexes_size('product'));

 

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

select relname as TABLE_NAME, reltuples as rowCounts from pg_class where relkind = 'r' order by 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 order by total_time desc limit 5;

备注:需要开启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
ORDER BY total_time DESC
LIMIT 3;

 

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.datname as datname, pgsa.usename as usename, pgsa.client_addr client_addr, pgsa.application_name
 as application_name, 
pgsa.state as state, pgsa.backend_start as backend_start, pgsa.xact_start as xact_start, extract(epoch from (now() - pgsa.xact_start)) 
as xact_stay, pgsa.query_start as query_start, 
extract(epoch from (now() - pgsa.query_start)) 
as query_stay , 
pgsa.query as 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 
order by query_stay desc 
limit 5;

 

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

select * from pg_stat_user_tables where n_live_tup > 100000 and seq_scan > 0 order by seq_tup_read desc limit 10;

 

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

select * from pg_stat_statements order by shared_blks_hit+shared_blks_read desc limit 5;

 

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';

 

六、数据库备份(非SQL)

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语句来进行支撑。

 

作者丨梦尧技术

到了这里,关于轻松拿下PostgreSQL,这30个实用SQL语句你细品的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 30天拿下Rust之切片

    概述         在Rust中,切片是一种非常重要的引用类型。它允许你安全地引用一段连续内存中的数据,而不需要拥有这些数据的所有权。切片不包含分配的内存空间,它仅仅是一个指向数据开始位置和长度的数据结构。切片是对数组的一个连续引用,它提供了一种方便、

    2024年03月13日
    浏览(38)
  • 30天拿下Rust之泛型

    概述         在Rust语言中,泛型是一种强大的工具,它允许我们编写可复用且灵活的代码。通过泛型,我们可以创建适用于多种类型的数据结构和函数,而无需为每种类型都重复编写相同的逻辑。在Rust中,泛型通过指定类型参数来实现,这些类型参数会在编译时被具体类

    2024年03月17日
    浏览(41)
  • 30天拿下Rust之引用

    概述         在Rust语言中,引用机制是其所有权系统的重要组成部分,它为开发者提供了一种既高效又安全的方式来访问和共享数据。引用可以被视为一个指向内存地址的指针,它允许我们间接地访问和操作存储在内存中的数据。与其他语言中的指针不同,Rust中的引用是

    2024年03月10日
    浏览(31)
  • 30天拿下Rust之输入输出

    概述         在软件开发中,输入输出(I/O)是任何应用程序的基本构建模块。Rust作为一门注重安全和性能的语言,在其标准库中提供了强大的I/O功能。这些功能使得Rust程序员能够非常轻松地进行标准I/O、文件读写等操作。 标准I/O         在Rust中,标准输入通常通

    2024年03月24日
    浏览(30)
  • 30天拿下Rust之Trait

    概述         在Rust中,Trait是一个核心概念,它允许我们定义类型应该具有的行为。Trait类似于其他语言中的接口,但Rust的Trait更为强大和灵活。它不仅定义了一组方法,还允许我们指定方法的默认实现、泛型约束和继承。通过Trait,我们可以定义一组方法的签名和关联类

    2024年03月17日
    浏览(30)
  • 30天拿下Rust之错误处理

    概述         在软件开发领域,对错误的妥善处理是保证程序稳定性和健壮性的重要环节。Rust作为一种系统级编程语言,以其对内存安全和所有权的独特设计而著称,其错误处理机制同样体现了Rust的严谨与实用。在Rust中,错误处理通常分为两大类:不可恢复的错误和可

    2024年03月21日
    浏览(57)
  • 30天拿下Rust之高级类型

    概述         Rust作为一门系统编程语言,以其独特的内存管理方式和强大的类型系统著称。其中,高级类型的应用,为Rust的开发者提供了丰富的编程工具和手段,使得开发者可以更加灵活和高效地进行编程。 Newtype模式         Newtype模式是一种轻量级的设计模式,用

    2024年04月15日
    浏览(34)
  • 30天拿下Rust之HashMap

    概述         HashMap,被称为哈希表或散列表,是一种可以存储键值对的数据结构。它使用哈希函数将键映射到存储位置,以便可以快速检索和更新元素。这种数据结构在许多编程语言中都存在,而在Rust中,它被实现为HashMapK, V。其中,K表示键的类型,V表示值的类型。H

    2024年03月17日
    浏览(33)
  • 30天拿下Rust之生命周期

    概述         在Rust中,生命周期是一个非常重要的概念,是保证内存安全和防止悬垂引用的核心机制之一。通过精确地跟踪引用的生命周期,Rust能够在编译阶段就防止许多其他语言在运行时才会遇到的内存问题。在Rust中,生命周期代表了引用的有效时间段。当我们创建

    2024年03月20日
    浏览(35)
  • 30天拿下Rust之图形编程

    概述         Rust语言以其卓越的安全性、性能和可靠性赢得了广大开发者的青睐,逐渐在系统编程、网络服务、游戏开发等领域崭露头角。随着Rust生态的日益繁荣,图形编程领域也涌现出一批优秀的框架和库,使得用Rust进行高效、安全的图形应用开发成为可能。 图形库

    2024年04月17日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包