zoukankan      html  css  js  c++  java
  • PostgreSQL 笔记

    管理

    无前缀的为普通用户命令,$ 为 postgres 命令,# 为 psql 命令。

    • 切到 postgres 用户:sudo -iu postgres
    • 新建用户:$ createuser --interactive
    • 删除用户:$ dropuser ${username}
    • 新建库:createdb ${db_name} -U ${username}
    • 删除库:dropdb ${db_name} -U ${username}
    • 连接数据库:psql -d ${db_name} -U ${username}
    • 切换数据库:# c ${db_name}
    • 切换用户:# c - ${user_name}
    • 列出所有用户:# du
    • 列出所有库:# l# SELECT * FROM pg_database;
    • 列出所有表:dt# SELECT * FROM pg_tables;
    • 列出所有模式:dn
    • 退出 psql:q 或 CTRL + D
    • 配置表:SELECT * FROM pg_settings;
    • 优先修改 postgresql.auto.conf 而非 postgresql.conf,前者会覆盖后者,但不要手动修改,使用 # ALTER SYSTEM SET ${prop_name} = ${value};,如 # ALTER SYSTEM SET work_mem = '500M'; 会自动刷新 auto* 的数据
    • postgresql*.conf 中可以 include ${path_releate_conf} 引入其他配置文件
    • PostgreSQL 异常关闭可能会导致 postmaster.pid 残留,删除了才能正常启动
    • pg.hba.conf 规定哪些 IP 哪些用户哪种方式登录,自上至下匹配,常用的身份验证方式:trust 没要求,md5 md5 的密码,password 明文密码,ident 用户映射(Win 不支持),peer 操作系统用户名一致就能登录,cer SSL 证书
    • 获取当前执行的进程 SELECT * FROM pg_stat_activity;,查找阻塞的语句 SELECT * FROM pg_stat_activity WHERE wait_event IS NOT NULL
    • 取消进程连接:SELECT pg_cancel_backend(${pid});
    • 终止进程连接:SELECT pg_terminate_backend(${pid});,连接终止了执行的 SQL 也会终止,举个例子,终止 test_user 用户的所有连接 SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE usename = 'test_user';
    • 还有一些语句参数阈值,超过某阈值的语句会被自动杀掉,0 表示禁用,deadlock_timeout 死锁超时(更建议使用 SELECT FOR UPDATE NOWAIT ... 而非依赖这个阈值),statement_timeout 语句最长执行时间(可针对单个语句自定义),lock_timeout 锁等待超时,idle_in_transaction_session_timeout 空闲事务最大超时时长
    • 创建模板:CREATE DATABASE my_db TEMPLATE my_template_db; 模板数据库禁止编辑与删除,将普通数据库修改为模板数据库:UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'mydb';,修改为非模板数据库 datistemplateFALSE 即可
    • scheme 用于对 database 进行分组管理(有很多表的话),同一个 scheme 中对象名不允许重复,创建时默认的表是 public scheme 的,创建 scheme 的语句为 CREATE SCHEME ${name},scheme 不同的话需要在表名前加上,还可以设置 search_path,去在不同的 scheme 中查找表,比如在 postgresql.conf 中配置 search_path = "$user", public,则会优先查找用户同名的 scheme
    • 查询当前用户 SELECT user;
    • 常用的几种权限,INSERT, SELECT, UPDATE, ALTER, EXECUTE, TRUNCATE
    • 对象所有者天生拥有对象所有权限,无需授予,但是这个权限对子对象没有继承关系,

    SQL

    • 创建用户
    CREATE ROLE ol3l_ox7 WITH LOGIN ENCRYPTED PASSWORD 'Changeme_123' NOSUPERUSER NOCREATEDB
        NOCREATEROLE INHERIT NOREPLICATION NOBYPASSRLS CONNECTION LIMIT -1;
    
    • 创建数据库
    CREATE DATABASE music_hub WITH OWNER ol3l_ox7 TEMPLATE template0 ENCODING 'UTF8'
        LC_COLLATE 'en_US.utf8' LC_CTYPE 'en_US.utf8' ALLOW_CONNECTIONS TRUE CONNECTION LIMIT -1 IS_TEMPLATE FALSE;
    
    • 按 database 授予权限
    GRANT ALL PRIVILEGES ON DATABASE music_hub TO ol3l_ox7;
    
    • 按 scheme 授予权限
    GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO ol3l_ox7;
    
    • 收回部分权限,这里的 PUBLIC 是所有人的意思,系统会默认将某些权限授予 PUBLIC (即所有人)
    REVOKE EXECUTE ON ALL FUNCTIONS IN SCHEMA ol3l_ox7 FROM PUBLIC;
    
  • 相关阅读:
    心情不好的时候
    离骚
    沁园春.雪
    顾炎武《精卫》
    韩愈《祝融峰》
    Python量化交易的简单介绍
    H5页面跳转到小程序代码
    小程序上拉加载,下拉刷新
    第一阶段:Python开发基础 day36 并发编程之Process的join用法和其他用法
    课后练习 第一阶段:Python开发基础 day38 多线程相关小练习
  • 原文地址:https://www.cnblogs.com/seliote/p/14333456.html
Copyright © 2011-2022 走看看