首页 > 其他分享 >pg常用运维命令

pg常用运维命令

时间:2024-11-25 16:04:20浏览次数:4  
标签:常用 运维 database 数据库 pg 权限 select schema

常用命令
\d 显示当前数据库中的所有的表、视图、sequence
\d test01 显示test01表的详情
\dt 显示当前数据库中的所有的表
\dt test* 只列出test开头的表
\db+ 查看pg中所有表空间
\dn 显示所有Schema
\dv 显示视图
\di 显示索引
\ds 显示序列号
\df 显示函数
\du, \dg 列出数据库所有角色或用户
\dp, \z 显示所有表和视图的权限分配情况
\dS, 显示pg_catalog 下的所有系统视图和系统表


1.从information_schema.tables获取所有表和视图,包括information_schema和pg_catalog的表和视图。
select table_catalog,table_schema,table_name,table_type from information_schema.tables;

select count(1) from information_schema.tables;

                 
          

pg  catalog是系统级的schema,用于存储系统函数和系统元数据。每个database创建好以后默认都会含有两个catalog:
一个名为pg_catalog,用于存储 PostgreSQL 系统自带的函数、表、系统视图、数据类型转换器以及数据类型定义等元数据;
另一个是information_schema,用于存储 ANSI 标准中所要求提供的元数据查询视图,这些视图遵从 ANSI SQL 标准的要求,
以指定的格式向外界提供 PostgreSQL 元数据信息


create schema <schema_name>;  #创建schema
select current_schema;   #确认当前schema




查进程:
select * from pg_stat_activity where usename <> 'dbajmcc' and query <> '';



杀进程:
select pg_cancel_backend(线程id);  
来kill掉指定的SQL语句。取消后台操作,回滚未提交事物,不会中断session


select pg_terminate_backend(pid)
取消后台操作,回滚未提交事物,并且中断session



==========================================================================================================================================

test_jiwei=# SHOW search_path;   //可以查看当前库下面的搜索路径
   search_path   
-----------------
 "$user", public                 //如果没有指定schema.表名,那么默认是和该库的owner同名的schema,如果也没有,则再是public这个shcema
(1 row)


SELECT * FROM information_schema.schemata;     //查看当前数据库下的所有schema

SELECT * FROM information_schema.tables;       //查看当前数据库下的所有表


查看参数的命令
show 参数名;
或
select name, setting, pending_restart from pg_settings where name like '%参数名%';

修改系统参数命令
ALTER SYSTEM SET shared_buffers TO '512MB';   #修改的参数会记录到postgresql.auto.conf中,不会改变postgresql.conf中的值

修改会话级别参数命令
SET shared_buffers TO '512MB'; 


查看是主库还是备库
登录数据库执行select pg_is_in_recovery()函数,如果返回t说明是备库,返回f说明是主库




====================================================查看库表oid====================================
1、库的oid
select * from pg_database where datname = 'jiweisun';
select datname,oid from pg_database;
  
2、表的oid
select relname,oid from pg_class where relname in ('aa'); 

3、查出表的存储位置
select pg_relation_filepath('表名');

===================================================================================================

备份

逻辑导出
pg_dump      

pg_dumpall   


物理备份
pg_basebackup     会备份数据和wal(这个是归档日志)
备份会生成两个目录文件,一个base目录,存的是数据,一个pg_wal,存的是归档日志


pg_basebackup -D /data1/pgsql/data -F -P -Xs -Upostgres  -h10.65.101.192 -p5432 

-D  备份到哪个目录
-Ft  打tar包
-F, --format=p|t       #output format (plain (default), tar)

-Pv
-P, --progress         #show progress information
-v, --verbose          #output verbose messages


-Xs 
-X, --wal-method=none|fetch|stream  #include required WAL files with specified method


-R, --write-recovery-conf  #write configuration for replication 


恢复:
类似于MySQL的xbk
把base目录拷贝到数据目录下,把pg_wal拷贝到归档日志目录下

然后到数据目录下,vim postgresql.auto.conf 

把 restore_command = 'cp /archive/%f %p'
   recovery_target = 'immediate'
   recovery_target_xid='事务号'
   
写到文件中,保存退出




========================================================

4、pg系统表介绍
\d 命令可以查看有哪些系统表,pg13版本一共有129个系统表、视图和sequence),系统表之间基本上都是以oid关联
PostgreSQL的每一个库中都有自己的一套系统表,其中大多数系统表都是在数据库创建时从模板数据库中拷贝过来的,
因此这些系统表里的数据都是与所属数据库相关的。
只有少数系统表是所有数据库共享的(比如pg_database),这些系统表里的数据是关于所有数据库的。


注:\? 命令可以查看各种命令

4.1 pg_class系统表
该表存储的是数据库所有的对象信息(relkind 字段值:r=ordinary table,i = index,S = sequence,v = view等等)

4.2 pg_am 系统表
该系统表存储的是系统支持的索引的访问方法(如btree,hash,gist,gin等索引)

4.3 pg_attribute系统表
该系统表存储的是数据表列的详细信息

4.4 pg_authid系统表
该表存储的是数据库用户的详细信息

4.5 pg_auth_memb                  ers系统表
该表存储的是数据库用户之间的关系

4.6 pg_database系统表
该表存储的是数据库的信息

4.7 pg_index系统表
该表存储的是索引信息  

4.8 pg_namespace系统表
该表存储的是数据库中的schema信息(pg中称为namespace,命名空间是SQL92模式下层的结构:每个名字空间有独立的关系、类型等集合,但并不会相互冲突。PostgreSQL的名字空间层次是:数据库.模式.表.属性。)       

4.9 pg_tablespace系统表



5、pg系统视图介绍
5.1 pg_group
存储的是用户组的信息

5.2 pg_indexes
存储的是索引详细信息
schemaname | public
tablename  | aa
indexname  | id_index
tablespace | 
indexdef   | CREATE INDEX id_index ON public.aa USING btree (id)

5.3 pg_locks
存储的是锁信息

5.4 pg_roles
存储的是角色信息

5.5 pg_tables
存储的是表对象信息
schemaname  | siyou
tablename   | bb
tableowner  | jiwei
tablespace  | 
hasindexes  | f
hasrules    | f
hastriggers | f
rowsecurity | f 



select pg_reload_conf() 函数
修改配置文件pg_hba.conf或者postgres.conf之后,在psql里执行这个函数可以使修改生效

或者是用pg_ctl -D /data1/pgsql/data reload 命令也可以生效



6.4 数据库对象管理函数
pg_column_size(any) int 存储一个指定的数值需要的字节数(可能压缩过)
pg_database_size(oid) bigint 指定OID的数据库使用的磁盘空间
pg_database_size(name) bigint 指定名称的数据库使用的磁盘空间
pg_indexes_size(regclass) bigint 关联指定表OID或表名的表索引的使用总磁盘空间
pg_relation_size(relation regclass, fork text) bigint 指定OID或名的表或索引,通过指定fork('main', 'fsm' 或'vm')所使用的磁盘空间
pg_relation_size(relation regclass) bigint pg_relation_size(..., 'main')的缩写
pg_size_pretty(bigint) text Converts a size in bytes expressed as a 64-bit integer into a human-readable format with size units
pg_size_pretty(numeric) text 把以字节计算的数值转换成一个人类易读的尺寸单位
pg_table_size(regclass) bigint 指定表OID或表名的表使用的磁盘空间,除去索引(但是包含TOAST,自由空间映射和可视映射)
pg_tablespace_size(oid) bigint 指定OID的表空间使用的磁盘空间
pg_tablespace_size(name) bigint 指定名称的表空间使用的磁盘空间
pg_total_relation_size(regclass) bigint 指定表OID或表名使用的总磁盘空间,包括所有索引和TOAST数据







7、postgres进程结构
postmaster --所有数据库进程的主进程(负责监听和fork子进程)
startup    --主要用于数据恢复的进程
syslogger  --记录系统日志的进程
pgstat     --收集统计信息
pgarch     --如果开启了归档,那么postmaster会fork一个归档进程
checkpointer   --负责检查点的进程
bgwriter    --负责把shared buffer 中的脏数据写入磁盘的进程
autovacuum lanucher   --负责垃圾回收的进程,如果开启了autovacuum,postmaster会fork这个子进程
autovacuum worker     --负责垃圾回收的worker进程,是launcher进程fork出来的


8、postgres物理结构
8.1主要讲一下存储结构
select * from pg_relation_filepath('aa');  查看aa这张表所在的目录

jiweisun=# select * from pg_relation_filepath('aa');
-[ RECORD 1 ]--------+-----------------
pg_relation_filepath | base/16386/16388


8.2 几个比较重要的内存参数参数
shared_buffers=128m     databuffer,相当于mysql  buffer  pool,一般大小设置为机器内存的25%,最大不要超过50%
wal_buffers=-1          wal日志 buffer,相当于mysql redo buffer, min 32kB, -1 sets based on shared_buffers
work_mem=4m             为每一个连接在join/排序/hash 等操作所需要的内存
max_connections = 100   默认值是100,有点小,需要增大,单节点2000以内差不多


8.3日志文件种类
$PGDATA/log  运行日志,pg10之前叫作$pgdata/pg_log
$PGDATA/pg_wal
$PGDATA/pg_xact 事务提交日志,pg10之前叫做pg_clog
服务器日志,可以在启动时指定,比如 pg_ctl start -l /alert.log



8.4 wal 日志命名格式
文件名为16进制的24个字符组成,每8个字符一组,每组意义如下
00000001 00000000 00000005
时间线     逻辑id   物理id


8.5 wal相关函数
select pg_walfile_name(pg_current_wal_lsn());    查看当前lsn所在的wal文件名
select * from pg_ls_waldir() order by modification asc;   查看各个wal文件最后修改时间
select pg_switch_wal();     切换wal日志

8.6 pg_waldump 查看wal 内容
pg_waldump 文件名





8、用户管理
create user jiwei with [encrypted] password '1234';
create role  和create user 一样,只是创建出来的账号没有登录权限,可以加个  with login;

postgres=# \help create user;
Command:     CREATE USER
Description: define a new database role
Syntax:
CREATE USER name [ [ WITH ] option [ ... ] ]

where option can be:

    SUPERUSER | NOSUPERUSER:创建出来的用户是否为超级用户
	CREATEDB | NOCREATEDB:创建出来的用户是否有create database的权限
	CREATEROLE | NOCREATEROLE:创建出来的用户是否有创建其它角色的权限
	CREATEUSER | NOCREATEUSER:创建出来的用户是否有创建其它用户的权限
	INHERIT | NOINHERIT:确定角色是否继承其它角色的权限
	LOGIN | NOLOGIN:创建出来的角色是否有登录权限
	CONNECTION LIMIT n:创建出来的角色并发连接数限制数量,默认值是“-1”,表示没有限制
	VALID UNTIL 'timestamp':密码失效时间
    | REPLICATION | NOREPLICATION
    | BYPASSRLS | NOBYPASSRLS
    | CONNECTION LIMIT connlimit
    | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL

    | IN ROLE role_name [, ...]
    | IN GROUP role_name [, ...]
    | ROLE role_name [, ...]
    | ADMIN role_name [, ...]
    | USER role_name [, ...]
    | SYSID uid

URL: https://www.postgresql.org/docs/13/sql-createuser.html

删除用户  drop user jiwei;

修改用户权限、密码等
alter user jiwei  with password '123456';


postgres=# \h alter user;
Command:     ALTER USER
Description: change a database role
Syntax:
ALTER USER role_specification [ WITH ] option [ ... ]

where option can be:

      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | BYPASSRLS | NOBYPASSRLS
    | CONNECTION LIMIT connlimit
    | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL
    | VALID UNTIL 'timestamp'

ALTER USER name RENAME TO new_name

ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT 
}
ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT
ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] RESET configuration_parameter
ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] RESET ALL

where role_specification can be:

    role_name
  | CURRENT_USER
  | SESSION_USER

URL: https://www.postgresql.org/docs/13/sql-alteruser.html


9、权限管理

说明:在postgresql数据库中,任何逻辑对象(包括数据库)都是有所有者的,也就是说数据库对象都是属于某个用户的,
所以,无需把对象的权限赋予所有者,因为所有者默认就拥有所有的权限,在PG数据库中,删除及其修改对象的权限都不能赋予别的用户,
它是所有者的固有权限,不能赋予或撤销,所有者也隐式地拥有把操作该对象的权限授予其他用户的权利。

#回收public权限
在初始化数据库实例后,数据库中默认就会存在一个名称为“public”的schema,任何用户都有在public schema上的create 权限,
通常我们需要把这个权限回收回来
revoke create on schema recharge from public;




说明:两类权限
用户的权限分两类,一类是在创建用户时就指定的权限,有:

超级用户的权限
创建数据库的权限
是否允许login的权限
更多见\help create role
这些权限是创建用户时指定的,后面可以使用alter role来修改。

另一类是由GRANT和REVOKE命令来管理的,有:
在数据库中创建schema的权限
连接某个数据库的权限
在某个数据库中创建数据库对象的权限,如表、视图、函数等
在一些表中做SELECT 、INSERT、UPDATE、DELETE、truncat、excute、trigger、REFERENCES、usage等操作的权限



9.1权限级别
cluster权限:实例级别的权限,通过pg_hba.conf配置
database权限:数据库权限,通过grant和revoke操作schema配置
TBS权限:表空间权限,跟database权限类似,通过grant和revoke操作表配置
schema权限:模式权限通过grant和revoke操作模式下的对象配置
object权限:对象权限,通过grant和revoke配置

9.2授权命令
grant all privileges on database 数据库名 to 用户名;   #示例赋予最大权限
grant select, insert, update, delete on 表名 to 用户名; #赋予指定权限
revoke select, insert, update, delete on 表名 from 用户名; #收回权限



10、用户、权限、建库例子
10.1 create user jiwei with password '1234';   #不给权限,这样创建出的用户是没有任何权限的。

10.2 create database jiwesun;                  #这样创建的库默认owner 是postgres账号
     create database jiweisun owner jiwei;     #指定创建出来的库的owner
10.3 alter database jiweisun owner to jiwei;  #修改库的owner为jiwei




11、创建用户完整流程例子
#创建用户
create user query encrypted password 'kol6xw2oxd6rfnwm';

#把schema授权给用户,要先切换到recon schema 所在的库
grant usage on schema recon to query;    # usage 是 有使用该schema 下 数据库对象(例如函数,视图,数据类型,索引等,不包括表)的权限
-- 如果是schema 要一个一个授权
grant usage on schema rmseouter to query;

grant select on all tables in schema recon to query;
-- 指定某些具体表
grant select on myschema.mytable to query;

#自动授予未来新创建表的查询权限
alter default privileges for user postgres in schema recon grant select on tables to query;
alter default privileges for user recharge in schema recharge grant all privileges on tables to recharge;
alter default privileges for user recharge in schema recharge grant all privileges on sequences to recharge;


#查看用户的权限

查看用户的系统权限:
SELECT * FROM pg_roles WHERE rolname = 'your_username';


查看用户在表上的权限:
SELECT * FROM information_schema.table_privileges WHERE grantee = 'ctp';


查看用户在存储过程和函数上的权限:
SELECT * FROM information_schema.routine_privileges WHERE grantee = 'your_username';






标签:常用,运维,database,数据库,pg,权限,select,schema
From: https://www.cnblogs.com/sunjiwei/p/18567824

相关文章

  • DB2数据库常用sql整理
    前言:        我们在查阅资料时,csdn上大部分数据库sql语句都是mysql或者oracle的,很难找到有关db2相关的sql,博主当年在修改db2数据库相关sql时曾经踩过很多坑,现在把以前整理过的sql语句整理到文章上供大家参考.    网上好多帖子写的db2相关的sql但凡放到......
  • GaussDB技术解读——GaussDB架构介绍之OM运维管理关键技术方案
    ​GaussDBKernelV5OM运维管理关键模块如下。OM运维主要功能有:安装升级节点替换扩容、缩容自动告警巡检备份恢复、容灾日志分析系统在华为云的部署模式下,OM相关组件部署示意图如下:图7华为云OM运维管理用户登录华为云Console,访问GaussDBKernelV5的管控页面,输入......
  • 人大金仓常用命令(kingbase)
    背景项目常用的关系型数据库是mysql或者oracle,现在甲方很多都开始数据库国产化,而我们也跟着开始学习国产数据库的知识。通过架构部选型,暂定人大金仓作为mysql及oracle的平替。实验环境兼容mysql模式常用命令ksql----连接数据库的客户端,类似于mysql命令或者sqlplus命令。找......
  • Keil 5常用Debug功能及方法简述
    作为嵌入式工程师,学会使用Keil5的debug工具尤为重要,通过debug调试,开发者可以逐步跟踪程序的执行过程,观察变量的变化、寄存器的状态以及内存的使用情况,有助于开发者深入理解程序的内部机制,从而优化代码性能,提高程序的稳定性和可靠性。PS:(本文是综合原子的STM32F407探索者指南......
  • Linux常用命令之groupdel命令详解
    groupdel命令详解groupdel是一个用于删除用户组的命令行工具,常见于类Unix操作系统(如Linux和macOS)。通过groupdel命令,可以从系统中移除一个用户组。删除用户组时,需要注意一些重要的事项,以确保不会影响系统的正常运行。基本语法groupdel命令的基本语法如下:group......
  • Linux常用命令之chmod命令详解
    chmod命令详解chmod(changemode)是Unix和Linux操作系统中用于改变文件或目录的访问权限的命令。通过chmod,用户可以设置文件或目录的所有者、所属组以及其他用户(即非所有者且不属于文件所属组的用户)的读取、写入和执行权限。基本语法chmod命令的基本语法如下:chmod......
  • 数字图像处理(4):FPGA中的定点数、浮点数
            (1)定点数:小数点固定在数据的某一位置的数,可以分为定点整数和定点小数和普通定点数。定点数广泛应用于数字图像处理(图像滤波、图像缩放)和数字信号处理(如FFT、定点卷积)中。定点整数:小数点在整个数据的最右侧。    +100(D)=01100100(B)定点小数:小数点在......
  • 深入解析 Java LinkedList:从基本特点到常用方法的全面介绍
    LinkedList是Java集合框架中非常常用的一种实现类,主要用于存储有序元素的链式结构。与ArrayList这种基于数组的实现不同,LinkedList使用双向链表来管理数据。在本文中,我们将从LinkedList的基本特点、继承关系、扩容机制、常用方法源码介绍、增删改查等多个方面详细解读......
  • docker-compose 配置文件内容详解以及常用命令介绍
    一、DockerCompose简介DockerCompose是一种用于定义和运行多容器Docker应用程序的工具。通过一个docker-compose.yml文件,您可以配置应用程序需要的所有服务(例如:Web服务器、数据库、缓存等)并轻松管理它们。Docker Compose使用的三个步骤:使用Dockerfile定义应用程序的......
  • HCIA-03 常用协议 ARP TCP UDP ICMP
    TCP/IP模型与OSI模型对比1.TCP/IP模型分为四层:应用层、传输层、网络层、数据链路层。2.OSI模型(开放系统互联模型)为七层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。3.TCP/IP模型中的传输层对应OSI模型中的传输层和会话层,网络层对应OSI模型的网络层,数据链路层......