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;
    
  • 相关阅读:
    凹凸函数
    HashMap数据类型使用注意不能使用基本数据类型
    Tomcat部署发布JSP应用程序的三种方法
    Ubuntu忘记密码,进不了系统的解决方法
    matlab之运算符及其优先级
    java和tomcat配置
    MySQL中 MySQL X.X Command Line Client 一闪而过
    Pearson(皮尔逊)相关系数
    CG, DCG, NDCG
    C#中ListBox中SelectedItem使用注意
  • 原文地址:https://www.cnblogs.com/seliote/p/14333456.html
Copyright © 2011-2022 走看看