PostgreSQL常用操作

  • 创建数据库:CREATE DATABASE db_name template tpl_name;
  • 删除数据库:drop database xxx;
  • 创建用户:CREATE USER xxx WITH PASSWORD 'admin';
  • 删除用户:drop user username;
  • 授权:GRANT ALL PRIVILEGES ON DATABASE my_database TO my_user;
  • 撤销权限:REVOKE ALL PRIVILEGES ON DATABASE my_database FROM my_user;
  • 统计数据库总数:SELECT COUNT(*) FROM pg_database WHERE datallowconn;SELECT COUNT(*) FROM pg_database WHERE datname NOT IN ('template0', 'template1', 'highgo');
  • 检测数据库中表总数:SELECT COUNT(*) FROM pg_catalog.pg_tables WHERE schemaname = 'public';
  • 检测序列总数:SELECT COUNT(*) FROM pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid WHERE c.relkind = 'S' AND n.nspname = 'public';
  • 检测主键数:SELECT COUNT(*) AS number_of_primary_key_columns FROM information_schema.table_constraints JOIN information_schema.key_column_usage USING (constraint_name, table_schema, table_name) WHERE constraint_type = 'PRIMARY KEY' AND table_schema = 'public';
  • 批量删除所有表:

    DO $$
    DECLARE
      r RECORD;
    BEGIN
      FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = 'public') LOOP
          EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(r.tablename) || ' CASCADE';
      END LOOP;
    END$$;
  • 批量删除所有序列:

    DO $$
    DECLARE
      r RECORD;
    BEGIN
      FOR r IN (SELECT 'DROP SEQUENCE ' || quote_ident(sequence_schema) || '.' || quote_ident(sequence_name) || ';' AS drop_cmd
                FROM information_schema.sequences) LOOP
          EXECUTE r.drop_cmd;
      END LOOP;
    END $$;
  • 获取数据库列表

    #!/bin/bash
    
    file="/web/database_list.txt"
    
    # 使用psql获取数据库列表,并去除空白行
    formatted_databases=$(psql -U 'sysdba' -lqt | cut -d \| -f 1 | sed '/^\s*$/d')
    
    formatted_databases=$(echo "$formatted_databases" | tr -d ' ')
    
    # 将换行符替换为空格
    formatted_databases=$(echo "$formatted_databases" | tr '\n' ' ')
    
    # 输出结果
    echo "$formatted_databases" > "$file"
    
    # 删除指定值
    sed -i "s/ highgo//g" "$file"
    sed -i "s/ install_v0//g" "$file"
    sed -i "s/ install_v1//g" "$file"
    sed -i "s/ install_v2//g" "$file"
    sed -i "s/ install_v3//g" "$file"
    sed -i "s/ template0//g" "$file"
    sed -i "s/ template1//g" "$file"
  • 断开数据库连接:

    SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE datname='db_name' AND pid<>pg_backend_pid();
    pg_terminate_backend:用来终止与数据库的连接的进程id的函数。
    pg_stat_activity:是一个系统表,用于存储服务进程的属性和状态。
    pg_backend_pid():是一个系统函数,获取附加到当前会话的服务器进程的ID。

Tags: PostgreSQL, 数据库

添加新评论