postgres csv日志和查看用户权限

本文介绍PostgreSQL的日志配置方法,包括日志审计、慢查询定位、checkpoint监控及锁监控等内容,并提供了推荐的日志配置方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      最近在使用postgres 时遇到的2个问题,顺便记录一下查到的比较好的资料。

      怀疑postgres在执行SQL时报错,程序日志中有无明确异常信息。通过查看csv日志来确定是否SQL真的是执行时报错。

 

      下面转自:https://www.cnblogs.com/kuang17/p/6902122.html?utm_source=itdadao&utm_medium=referral

       

  日志审计 

  审计是值记录用户的登陆退出以及登陆后在数据库里的行为操作,可以根据安全等级不一样设置不一样级别的审计, 

  此处涉及的参数文件有:

 

  logging_collector      --是否开启日志收集开关,默认off,开启要重启DB

  log_destination    --日志记录类型,默认是stderr,只记录错误输出

  log_directory      --日志路径,默认是$PGDATA/pg_log, 这个目录最好不要和数据文件的目录放在一起, 目录需要给启动postgres的操作系统用户写权限.

  log_filename       --日志名称,默认是postgresql-%Y-%m-%d_%H%M%S.log

  log_file_mode   --日志文件类型,默认为0600

  log_truncate_on_rotation  --默认为off,设置为on的话,如果新建了一个同名的日志文件,则会清空原来的文件,再写入日志,而不是在后面附加。

  log_rotation_age   --保留单个文件的最大时长,默认是1d,也有1h,1min,1s,个人觉得不实用

  log_rotation_size  --保留单个文件的最大尺寸,默认是10MB

  log_error_verbosity --默认为default,verbose表示冗长的

  log_connections    --用户session登陆时是否写入日志,默认off

  log_disconnections --用户session退出时是否写入日志,默认off

 

 

  【推荐的日志配置】

  logging_collector = on
  log_destination = 'csvlog'
  log_truncate_on_rotation = on
  log_connections = on
  log_disconnections = on
  log_error_verbosity = verbose
  log_statement = ddl
  log_min_duration_statement = 60s
  log_checkpoints = on
  log_lock_waits = on
  deadlock_timeout = 1s

 

  1.记录级别

  记录用户登陆数据库后的各种操作,postgres日志里分成了3类,通过参数pg_statement来控制,默认的pg_statement参数值是none,即不记录,可以设置ddl(记录create,drop和alter)、mod(记录ddl+insert,delete,update和truncate)和all(mod+select)。

 

  log_statement = ddl

 

  一般的OLTP系统审计级别设置为ddl就够了,因为记录输出各种SQL对性能的影响还是蛮大的,安全级别高一点的也可以设置mod模式,有条件也可以不在数据库层面做,而是购买设备放在网络层监控解析。

 

  按不同情况进行配置审计级别:

  1)审计用户hm连到数据库hm 的所有SQL.

  alter role hm in database hm set log_statement='all';

  2) 审计用户hm 的所有SQL.

  alter role hm set log_statement='all';

  3) 审计任何用户连接到数据库hm 的所有SQL.

   alter database hm set log_statement='all';

 

 

  2.定位慢查询SQL 

  可以设置一定时长的参数(log_min_duration_statement),来记录超过该时长的所有SQL,对找出当前数据库的慢查询很有效。 比如log_min_duration_statement = 2s,记录超过2秒的SQL,改完需要reload 

 

  log_min_duration_statement = 2s

 

  3.监控数据库的checkpoint 

  当数据库进行一项大更新操作时,如果参数设置不当,会在日志里留下大量的告警信息,频繁的做checkpoint会导致系统变慢,不用设置都会有。

  但是不会记录系统正常的checkpoint,如果你想看系统一天之类发生了多少次checkpoint,以及每次checkpoint的一些详细信息,比如buffer,sync等,就可以通过设置log_checkpoints,该参数默认值是off。

 

  log_checkpoints = on 

 

  4.监控数据库的锁 

  数据库的锁通常可以在pg_locks这个系统表里找,但这只是当前的锁表/行信息,如果你想看一天内有多少个超过死锁时间的锁发生,可以在日志里设置并查看,log_lock_waits 默认是off,可以设置开启。这个可以区分SQL慢是资源紧张还是锁等待的问题。

  log_lock_waits=on

  deadlock_timeout=1

  还有一些Debug功能,适合修改源码调试,一般的的系统上并不需要,暂时比较关注的就这些。

 

  5.可以在表上设置触发器,来审计

 

  6.可以使用插件pg_log_userqueries 来做,没有必要

 

  【注意事项】

  1. 超级用户可以修改这些配置项, 所以被审计的用户最好是普通用户. 否则用户连上来可以修改这些审计项.

  2. 程序用的数据库账号和个人用的数据库账号分开, 对于程序用的数据库账号可以只审计DDL操作, 而对于个人使用的数据库账号, 建议审计所有的SQL.

  3. 变量优先级(事务>会话>database/role>启动参数>配置文件) 

  某些全局变量可以动态修改,例如本文提到的log_statement。修改后reload之后,所有会话都会读到最新的变量

 

        还有一个问题是执行删除重新创建shcema时报没有superuser权限的错误。确定某个pg用户的权限时使用\du命令来查看。

        需要superuser权限的操作有创建extension,创建shcema等。

 

        还有些看到的命令。没有实际用过,先记录下。

        COPY weather FROM '/home/user/weather.txt';
        批量将文本文件中内容导入到wether表

        修改用户归属组
        Alter Group 组名称 add user 用户名称

        为组赋值权限
        grant 操作 On 表名称  to group 组名称

        为用户复制SCHEMA权限
        grant all on SCHEMA 作用域名称 to 用户名称

        查看客户端连接情况
        SELECT client_addr ,client_port,waiting,query_start,current_query FROM pg_stat_activity;

       

  查询正在执行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;

    https://www.cnblogs.com/liyasen/p/6611020.html

转载于:https://www.cnblogs.com/lnlvinso/p/11223133.html

<think>我们正在讨论使用pgloader将PostgreSQL数据迁移到Hologres。pgloader是一个强大的数据迁移工具,支持从多种数据库迁移到PostgreSQL兼容的数据库。由于Hologres兼容PostgreSQL协议,因此可以使用pgloader进行迁移。迁移步骤大致如下:1.准备环境:安装pgloader,确保能访问源PostgreSQL目标Hologres。2.创建目标表:在Hologres中创建与源PostgreSQL结构相同的表(或者使用pgloader自动创建)。3.编写pgloader配置文件:定义源数据目标数据库的连接信息,以及迁移选项。4.执行迁移命令。注意:Hologres是阿里云的产品,使用PostgreSQL协议,但有一些限制扩展。在迁移前需要确认数据类型兼容性,特别是一些自定义类型或者Hologres不支持的类型。下面是一个示例的pgloader配置文件(例如:load.set):```confLOAD DATABASEFROMpgsql://[user]:[password]@[source_host]:[port]/[database]INTOpgsql://[user]:[password]@[hologres_endpoint]:[port]/[database]WITHinclude drop, createtables,create indexes, resetsequences,foreign keys,workers=8,concurrency=1,multiple readersper thread, rowsper range=50000SETPostgreSQLPARAMETERSmaintenance_work_memto '128MB',work_mem to'4MB'ALTER SCHEMA'public' RENAME TO'public' ;```注意:将上述配置中的占位符替换为实际值。Hologres的endpoint可以在阿里云控制台获取。执行命令:```bashpgloader load.set```迁移过程中可能遇到的问题: -数据类型不支持:需要检查Hologres的数据类型兼容性,必要时进行类型转换。-权限问题:确保源数据库可读,目标数据库可写。 -网络连接:确保pgloader所在机器可以连通源目标。另外,pgloader支持在迁移过程中进行数据转换,如果有需要可以在配置文件中添加转换规则。由于Hologres是分布式数据库,对于大表,建议在目标表设置合适的分布键(DISTRIBUTED BY)以提高查询性能。pgloader在创建表时不会创建分布键,因此需要在迁移前在Hologres中手动创建表并指定分布键,或者迁移后修改表结构。另一种做法是:先让pgloader自动创建表(不包含分布键),然后通过ALTER TABLE添加分布键。但是要注意,添加分布键会导致数据重分布,对于大表可能耗时较长。因此,最佳实践是在迁移前创建好表结构(包括分布键),然后在配置文件中使用`create tablesno`来禁用自动创建表。所以,步骤可以调整为:1.在Hologres中手动创建表(包括分布键、分区键等优化设置)。2.修改pgloader配置文件,设置`createtables no`,只迁移数据。配置文件示例: ```confLOADDATABASEFROMpgsql://[user]:[password]@[source_host]:[port]/[database]INTOpgsql://[user]:[password]@[hologres_endpoint]:[port]/[database]WITH includenodrop,create tablesno,createindexes no, resetsequences no, foreignkeys no,workers =8, concurrency =1, multiplereaders perthread,rows perrange =50000ALTER SCHEMA'public' RENAME TO'public' ;```注意:这里我们禁用了创建表、索引等,因为表已经存在。此外,如果表有自增主键,需要注意序列的迁移。在数据迁移后,可能需要重置序列的当前值。性能优化:-调整`workers``concurrency`参数,根据机器配置网络情况调整并发。-可以设置批量提交的大小(`batchsize`)预取行数(`prefetch rows`)来优化性能。迁移完成后,需要验证数据的完整性一致性。由于Hologres与PostgreSQL在语法功能上存在差异,迁移后可能需要调整SQL语句,特别是涉及复杂查询自定义函数的情况。参考文献:[1]pgloader官方文档:https://pgloader.readthedocs.io/en/latest/[2] Hologres文档:https://www.alibabacloud.com/help/product/113622.htm相关问题:1.使用pgloader迁移时如何跳过某些表?2.迁移过程中出现数据类型不兼容的错误该如何处理?3.如何验证迁移后数据的正确性?4.除了pgloader,还有哪些工具可以将PostgreSQL迁移到Hologres?</think>### 使用 pgloader 迁移 PostgreSQL 数据到 Hologres pgloader 是一个高效的开源数据迁移工具,支持将 PostgreSQL 数据迁移到兼容 PostgreSQL 协议的数据库(如 Hologres)。以下是详细迁移步骤注意事项: --- #### **一、迁移流程** 1. **环境准备** - 安装 pgloader: ```bash # Ubuntu/Debian sudo apt-get install pgloader # 或从源码编译 git clone https://github.com/dimitri/pgloader && cd pgloader make pgloader ``` - 确保源 PostgreSQL 数据库可访问,目标 Hologres 实例已开通(需 **兼容 PostgreSQL 协议**)。 2. **编写配置文件(如 `load.set`)** ```conf LOAD DATABASE FROM pgsql://[user]:[password]@[pg_host]:[pg_port]/[db_name] -- PostgreSQL 源 INTO pgsql://[user]:[password]@[hologres_endpoint]:[port]/[db_name] -- Hologres 目标 WITH include drop, create tables, create indexes, reset sequences, foreign keys, workers = 8, concurrency = 1 -- 并发控制 ALTER SCHEMA 'public' RENAME TO 'public'; -- 保持相同 schema ``` - **关键参数**: - `include drop`:覆盖目标同名表 - `workers`:并行线程数(建议按 CPU 核心数调整) - `hologres_endpoint`:阿里云控制台获取的 Hologres 连接地址 3. **执行迁移** ```bash pgloader load.set ``` --- #### **二、注意事项** 1. **数据类型兼容性** - Hologres 兼容多数 PostgreSQL 类型,但需注意: - 自定义类型需手动转换 - 数组类型 `TEXT[]` 直接支持 - 大对象(BYTEA)需测试传输性能 2. **性能优化** - **批量写入**:在配置中添加 `batch size = 100MB` 减少网络开销 - **错误容忍**:添加 `on error stop` 避免单条错误中断迁移 - **网络延迟**:在 ECS 或相同 VPC 运行 pgloader 降低延迟 3. **权限要求** - 源 PostgreSQL:用户需有 `SELECT` 权限 - 目标 Hologres:用户需有 `CREATE TABLE` `INSERT` 权限 --- #### **三、常见问题处理** 1. **连接失败** - 检查 Hologres 白名单是否允许 pgloader 的 IP - 验证端口(默认 5432)是否开放 2. **数据类型错误** ```conf CAST column_name TYPE text USING convert_to_text(column_name) -- 强制转换类型 ``` 3. **迁移中断恢复** - 添加 `WITH retries = 5` 自动重试 - 通过 `--verbose` 参数输出详细日志定位问题: ```bash pgloader --verbose load.set > migration.log ``` --- #### **四、迁移后验证** 1. **数据一致性检查** ```sql -- 行数比对 SELECT 'PG' as source, count(*) FROM pg_table UNION ALL SELECT 'Hologres', count(*) FROM hologres_table; ``` 2. **性能测试** - 在 Hologres 执行典型查询,对比响应时间 - 检查索引是否生效:`EXPLAIN ANALYZE SELECT ...` --- #### **五、替代方案** 若遇到复杂类型不兼容: - **使用 DataWorks**:阿里云官方数据集成工具,提供图形化界面 - **CSV 中转**: ```bash # PostgreSQL 导出 psql -c "COPY table TO '/path/table.csv' CSV HEADER" # Hologres 导入 psql -h hologres_endpoint -c "COPY table FROM '/path/table.csv' CSV" ``` [^1]: pgloader 官方文档:https://pgloader.readthedocs.io/en/latest/ [^2]: Hologres 兼容性说明:https://help.aliyun.com/zh/hologres/user-guide/postgresql-compatibility-overview ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值