#PostgreSQL
共 83 篇文章
SMALLINT 返回 Integer
pgJDBC 把 SMALLINT 的默认 getObject 结果映射为 Integer,元数据类名也因此是 Integer。需要 Short 时采用显式类型读取,并保留 SQL NULL。
PostgreSQL ALTER TABLE 一直等锁,别只按 query_start 找阻塞事务
结合事务开始时间与实际阻塞PID查锁等待,分别处理取锁超时和空闲事务终止,避免误杀会话。
asyncpg 0.28 关闭缓存后仍报 unnamed prepared statement does not exist
核对0.28匿名预备语句路径、0.29正式修复与池化版本,区分缓存设置和扩展查询协议。
pg_partman 被未来数据卡住:检查 ignore_default_data
默认分区中的未来记录使 pg_partman 维护尝试挂载异常范围,检查 5.4.3 的 ignore_default_data。恢复当前维护后,仍需处理已有记录与分区缺口。
备用库查询报 shared buffer pin,hot_standby_feedback 为什么没挡住
物理备用库开启反馈后,长查询仍可能因 buffer pin 恢复冲突被取消。结合日志、冲突计数和 WAL 等待预算调整报表任务与复制延迟。
pg_restore 只恢复指定表时报 type hstore does not exist
整库恢复正常,pg_restore -t 选表却缺少 hstore 类型?检查恢复目标的扩展与 schema,并核对选表恢复没有自动包含的依赖和附属对象。
pg_dump 报 row-level security policy:检查完整导出权限
pg_dump 在 COPY 阶段遭遇 RLS 报错,核对实际角色、表所有者和强制策略。区分完整备份、按可见行导出与排除管理对象的迁移范围。
REPLICA IDENTITY NOTHING 后仍无法 DELETE,逻辑复制需要什么行标识
无主键表发布 DELETE 时,REPLICA IDENTITY NOTHING 不会绕过行标识检查。核对主键、可用唯一索引或 FULL,并评估订阅端应用与回退影响。
逻辑复制订阅停在 i 状态:检查表同步 worker 是否有名额
逻辑复制订阅停在 i 状态且日志报 worker slots 不足,核对订阅端 apply 与表同步 worker 预算、总 worker 容量和重启生效条件。
pg_upgrade 后没有 analyze_new_cluster.sh,还需要收集统计吗
升级到 PostgreSQL 14 至 17 后,不再生成 analyze_new_cluster.sh,但仍需按输出收集统计。PostgreSQL 18 的默认统计迁移与后续维护另有区别。
pg_restore 给扩展写注释时报 must be owner of extension
pg_restore 在 COMMENT ON EXTENSION pg_trgm 时报所有者错误,先核对扩展身份和失败 SQL,再决定保留或跳过注释,并检查整轮恢复结果。
pg_restore 报 transaction_timeout:检查恢复工具的实际版本
恢复时报 transaction_timeout 未识别,先查实际 pg_restore 版本与目标服务器。归档格式、客户端兼容和日志中的继续执行需分别判断。
pg_basebackup 报 max_wal_senders,单机备份为何也需要复制连接
单机 PostgreSQL 用 pg_basebackup 也需要 WAL sender。区分关闭 WAL 归档与关闭复制能力,按备份参数核对连接容量及重启条件。
pg_upgrade 报 could not load library:检查扩展缺包和 adminpack 移除
pg_upgrade 的共享库检查失败时,区分目标版本缺少扩展包与 adminpack 已被移除,核对旧库调用和删除影响,再重新检查升级条件。
PostgreSQL 并发唯一索引显示 INVALID,却仍拒绝重复写入
并发唯一索引构建失败后,INVALID索引仍可能检查写入唯一性。先定位错误对象与构建阶段,保留完整性保护,再安排针对索引的并发重建。
pgJDBC 强转失败
pgJDBC 42.7.13 的多语句 PreparedStatement batch 可能报 CompositeQuery 强转失败,42.7.14 仍保留相关路径。拆分语句时保留执行顺序、事务与返回值约定。
Npgsql 列是 timestamp without time zone,却报只接受 UTC:检查参数类型
Npgsql 写入 DateTime 报 timestamp 类型不匹配时,先检查参数推断、目标列类型和 DateTime.Kind,再决定是否转换为 UTC。
PostgreSQL 过程里 DETACH PARTITION CONCURRENTLY 报事务块错误
过程内COMMIT不能让DETACH PARTITION CONCURRENTLY成为客户端顶层语句。核对调用位置、事务边界、默认分区和中断分离状态。
PostgreSQL 设置 ON DELETE SET NULL 后仍无法 TRUNCATE 父表
PostgreSQL 的 TRUNCATE 不执行外键 ON DELETE SET NULL。需要保留子表时使用 DELETE,并核对可空列、其他外键、清理范围及事务回退边界。
PostgreSQL 外键加了 NOT VALID,删除父行仍会级联删子行
NOT VALID外键仍会执行ON DELETE CASCADE;旧孤儿可暂留,新引用继续检查。先读约束定义,确认删除规则和历史数据处理。


