#PostgreSQL
共 83 篇文章
用了 --no-owner,pg_restore 仍报 role does not exist
恢复数据库时缺少旧角色:区分OWNER与GRANT/REVOKE,核对no-owner和no-acl范围,选择角色迁移或重新分配目标权限。
PostgreSQL CHECK 用函数统计项目数量,验证通过后仍能超额
CHECK调用函数读取其他行,验证通过后仍可超出项目额度。区分行内检查和跨行规则,核对函数、并发入口及事务设计。
Django 用 psycopg2 命名游标报 outside of transactions:查询与读取都要在事务内
Django 使用 psycopg2 命名游标报事务外错误时,将声明和分批读取放在同一连接的事务中;区分自动提交、事务池、流式响应与 HOLD 游标生命周期。
PostgreSQL SELECT DISTINCT 报 could not identify an equality operator for type json
普通 DISTINCT 比较所有输出列,json 缺少相等运算符。确认去重口径后在查询中生成或转换为 jsonb,并核对重复键、文本形式及转换边界。
psql 合并删库和建库命令时报事务块错误
psql 把同一个 -c 中的多条 SQL 作为一次请求执行,删库和建库会触发事务块限制。拆成独立 -c,核对维护库和外层事务,并处理删库成功后建库失败的恢复风险。
PostgreSQL 生成列使用 to_char,报 generation expression is not immutable
日期列用to_char生成展示文本时建列失败:核对函数分类与隐式转换,把显示格式放在查询或应用中,避免盲目标记IMMUTABLE。
PostgreSQL 分区表只用 id 作主键,报 must include all partitioning columns
按日期分区后不能只用id建立父表主键:核对完整分区键,区分复合标识与全表唯一编号,连同外键和应用访问方式选择模型。
PostgreSQL 表名有大写字母,查询报 relation does not exist
PostgreSQL 表清单能看到大写表名,查询却报 relation does not exist:核对数据库、schema 和精确拼写,用双引号或 quote_ident 正确引用表与列。
PostgreSQL 按时间倒序时 NULL 排在最前面
PostgreSQL 的 DESC 默认把 NULL 放在前面。使用 DESC NULLS LAST 保留空值行,同时区分各排序键、分页并列规则和索引扫描顺序。
PostgreSQL SET DEFAULT 后加 NOT NULL,仍报 contains null values
给已有字段设置默认值不会填充旧NULL。检查历史空值和应用输入,评估业务补值、分批回填与USING重写的影响。
PostgreSQL 已授权表的 INSERT,插入仍报 permission denied for sequence
PostgreSQL 表已有 INSERT 权限,新增记录仍报 permission denied for sequence,可核对应用当前角色与实际取号序列,补充单对象 USAGE,并区分现有授权和未来序列的默认权限。
PostgreSQL upsert 前几次成功,随后报 no unique or exclusion constraint
同一预编译upsert先成功后失败:核对部分唯一索引的参数化条件、通用计划与定制计划,把固定业务范围写在冲突目标中。
PostgreSQL 18 挂载 /var/lib/postgresql/data 后启动失败
官方 PostgreSQL 18 镜像改用主版本数据子目录,旧挂载可能报 runc 错误或 unused mount/volume。确认实际卷与数据版本,修正空目录部署,并区分挂载调整和数据库升级。
PostgreSQL CHECK NOT VALID 创建成功,VALIDATE CONSTRAINT 却失败
NOT VALID跳过旧行验证,后续VALIDATE仍会检查历史数据。按真实CHECK表达式找条件为假的行,保留NULL语义和新写入保护。
PostgreSQL 临时表刚创建成功,下一条查询却报不存在
ON COMMIT DROP 在当前事务提交时删除临时表。核对自动提交和实际连接,将创建与使用放进同一受控事务,并区分保留行与删除行的生命周期。
PostgreSQL 布尔列改成 false,CASE 统计结果仍不变
CASE 判断了 true、false 常量却没有引用列,导致条件计数不随数据变化。按列使用 FILTER 或 CASE,并核对空值、空集合及关联后的统计口径。
PostgreSQL 备份报 server version mismatch:检查运行 pg_dump 的容器
数据库升级后 pg_dump 仍来自旧备份容器,导致 server version mismatch。核对两端主版本、调用匹配客户端,并让失败退出码、归档检查和隔离恢复成为验收条件。
SQLAlchemy 捕获 IntegrityError 后仍报会话已回滚:把 flush 和 rollback 放对位置
SQLAlchemy 捕获 IntegrityError 后继续查询仍失败时,先确认错误是否发生在 flush,并对同一 Session 显式 rollback,再开始后续事务。
PostgreSQL 引用复合主键的部分列,报 no unique constraint matching given keys
PostgreSQL 复合外键必须引用匹配的唯一键。根据业务选择引用完整主键,或为父表添加两列唯一约束,并核对重复数据、空值和迁移锁的影响。
PostgreSQL 输入密码后仍报 Peer authentication failed
psql 输入密码后仍报 Peer authentication failed,可能是本机 socket 连接先匹配了 peer 规则。核对连接方式、目标实例和 pg_hba.conf 顺序,保留管理员通道,再按需调整指定角色的 SCRAM 认证。


