PostgreSQL中有哪些常用的SQL语句
创始人
2024-12-22 01:42:34
0次

  创建新的用户

  创建一个新的用户

  CREATE USER WITH ENCRYPTED PASSWORD '';

  用户授权

  授予 CONNECT 访问权限

  GRANT CONNECT ON DATABASE database_name TO username;

  然后授予模式使用

  GRANT USAGE ON SCHEMA schema_name TO username;

  为特定表授予 SELECT 权限

  GRANT SELECT ON table_name TO username;

  将 SELECT 授予多个表

  # 执行格式

  GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO username;

  # 例子

  grant select on all tables in schema public to user1;

  如果您希望将来自动授予对新表的访问权限,则必须更改默认值

  ALTER DEFAULT PRIVILEGES IN SCHEMA schema_name GRANT SELECT ON TABLES TO username;

  创建数据库

  创建以 utf-8 字符的数据库,并且以 template0 为模版创建

  CREATE DATABASE dbname WITH OWNER = postgres TEMPLATE = template0 ENCODING = 'UTF8';

  给指定用户授指定数据库所有权限

  GRANT ALL PRIVILEGES ON DATABASE dbname to username;

  在执行登陆操作后提示 FATAL: role 'root' is not permitted to log in.

  alter user "root" login;

  数据库备份与恢复

  备份所有数据库

  pg_dumpall > db.out

  恢复所有数据库

  # 执行这个命令的时候连接到哪个数据库无关紧要,因为pg_dumpall 创建的脚本将会包含恰当的创建和连接数据库的命令

  psql -f db.out postgres

  备份单个数据库

  pg_dump -h localhost -U postgres(用户名) 数据库名(缺省时同用户名) > /data/dum.sql

  恢复单个数据库

  psql -U postgres(用户名) 数据库名(缺省时同用户名) < /data/dum.sql

  备份单个数据库并压缩

  pg_dump -h localhost -U postgres(用户名) 数据库名(缺省时同用户名) | gzip > /data/dum.sql.gz

  恢复单个压缩数据库备份

  gunzip < /data/dum.sql.gz | psql -h localhost -U postgres(用户名) 数据库名(缺省时同用户名)

  备份单表操作

  pg_dump -U postgres -h localhost -p 5432 -t staff -f staff.sql yjl(表示数据库名称)

  -U 表示用户

  -h 表示主机

  -p 表示端口号

  -t 表示表名

  -f 表示备份后的sql文件的名字

  -d 表示要恢复数据库名称

  恢复数据单表操作

  psql -U postgres -h localhost -p 5432 -d product -f staff.sql

  查询当前链接

  查询当前连接数

  # 统计当前所有连接数

  select count(1) from pg_stat_activity;

  # 查询当前连接数详细信息

  select * from pg_stat_activity;

  查询最大连接数

  show max_connections;

  # 最大连接数也可以在pg配置文件中配置:

  # 在 postgresql.conf 中设置:

  max_connections = 500

  统计数据库占用磁盘大小

  统计各数据库占用磁盘大小

  SELECT d.datname AS Name, pg_catalog.pg_get_userbyid(d.datdba) AS Owner,

  CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')

  THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(d.datname))

  ELSE 'No Access'

  END AS SIZE

  FROM pg_catalog.pg_database d

  ORDER BY

  CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')

  THEN pg_catalog.pg_database_size(d.datname)

  ELSE NULL

  END DESC -- nulls first

  LIMIT 20

  统计数据库中各表占用磁盘大小

  # 只显示表名和占用磁盘大小

  SELECT

  table_schema || '.' || table_name AS table_full_name,

  pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) AS size

  FROM information_schema.tables

  ORDER BY

  pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC;

  # 详细显示各个参数并按数据库占用大小排序

  SELECT *, pg_size_pretty(total_bytes) AS total

  , pg_size_pretty(index_bytes) AS INDEX

  , pg_size_pretty(toast_bytes) AS toast

  , pg_size_pretty(table_bytes) AS TABLE

  FROM (

  SELECT *, total_bytes-index_bytes-COALESCE(toast_bytes,0) AS table_bytes FROM (

  SELECT c.oid,nspname AS table_schema, relname AS TABLE_NAME

  , c.reltuples AS row_estimate

  , pg_total_relation_size(c.oid) AS total_bytes

  , pg_indexes_size(c.oid) AS index_bytes

  , pg_total_relation_size(reltoastrelid) AS toast_bytes

  FROM pg_class c

  LEFT JOIN pg_namespace n ON n.oid = c.relnamespace

  WHERE relkind = 'r'

  ) a

  ) a ORDER BY total_bytes desc;

  查看 PostgreSQL 正在执行的 SQL

  SELECT

  procpid,

  start,

  now() - start AS lap,

  current_query

  FROM

  (SELECT

  backendid,

  pg_stat_get_backend_pid(S.backendid) AS procpid,

  pg_stat_get_backend_activity_start(S.backendid) AS start,

  pg_stat_get_backend_activity(S.backendid) AS current_query

  FROM

  (SELECT pg_stat_get_backend_idset() AS backendid) AS S

  ) AS S

  WHERE

  current_query <> ''

  ORDER BY

  lap DESC;

  # 参数解释

  procpid:进程id

  start:进程开始时间

  lap:经过时间

  current_query:执行中的sql

  # 通过命令:

  =# select pg_cancel_backend(线程id);

  来kill掉指定的SQL语句。(这个函数只能 kill Select 查询,而updae,delete DML不生效)。

  # 使用

  =# select pg_terminate_backend(pid int)

  可以kill 各种DML(SELECT,UPDATE,DELETE,DROP)操作。

  虽然可以使用 kill -9 来强制删除用户进程,但是不建议这么去做。

  因为:对于执行 update 的语句来说,kill掉进程,可能会导致 Postgres 进入到 recovery mode;而在 recovery mode 下,会锁表,不允许链接数据库。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...