#PostgreSQL
共 83 篇文章
psql 导入 SQL 时连续报 current transaction is aborted
psql 导入 SQL 时,一条语句失败可能让后续命令连续报 current transaction is aborted。定位首条错误,用 ON_ERROR_STOP 停止脚本,并按事务边界决定完整回滚或保存点恢复。
PostgreSQL 已给 public 授权仍无法建表:核对授权连接的数据库
同名 public 属于各自的数据库;比较管理员和应用的实际连接,在目标库给迁移角色授予需要的 schema 权限。
PostgreSQL 用 array_length 等于 0 查不到空数组
PostgreSQL 空数组的 array_length 返回 NULL,等于 0 的条件因此漏选。改用 cardinality 判断元素数量,并区分空数组、NULL 数组和含 NULL 元素的数组。
pgJDBC 查询 JSONB 问号运算符时报参数未绑定
PreparedStatement 会把单问号当作值参数。JSONB 运算符用 ?? 转义,真正的占位符继续绑定,并核对 ORM 到 JDBC 的解析层。
psql 连接时报 invalid percent-encoded token
psql 连接 URI 报 invalid percent-encoded token,可能是密码中的百分号未正确编码。区分 shell 引号与 URI 编码,使用密码提示或密码文件保留原始密码,并核对实际连接目标。
Alembic 建索引报 cannot run inside a transaction block
Alembic 迁移中并发建索引被 PostgreSQL 事务块限制拒绝时,用 autocommit_block 划分执行区段,并核对提前提交、失败遗留无效索引及降级边界。
asyncpg 在线改表后报 InvalidCachedStatementError:旧缓存遇到新结构
在线修改 PostgreSQL 结构后,旧连接的查询计划或类型缓存可能失效。区分事务内外处理、直接 asyncpg 与 SQLAlchemy 的缓存参数,并安排迁移和连接生命周期。
PostgreSQL LEFT JOIN 统计时零记录组织不显示
右表筛选条件放在 WHERE 会过滤 LEFT JOIN 补出的空行。将计数范围移入 ON,保留无匹配组织,并用非空主键计数验证零记录结果。
PostgreSQL 连接数耗尽:连接池只有 10,为什么仍报 too many clients
连接池 max 只约束一个池。统计数据库全局连接,计算应用实例的连接预算,检查长事务及连接是否归还,再决定怎样调整容量。
PostgreSQL 物化视图有索引,仍报 cannot refresh concurrently
PostgreSQL 并发刷新物化视图需要合格的唯一索引,已有 GIN 搜索索引并不够。核对索引有效性、行粒度和填充状态,再安排建索引与刷新,避免用删除数据或重置视图绕过错误。
PostgreSQL 允许空值的状态列写入 NULL 仍报 CHECK 冲突
区分 SQL 空值与字符串 NULL,核对参数类型及导入标记,在保留 CHECK 约束的前提下修正输入。
PostgreSQL 在 SET 左侧使用表别名,报 column does not exist
PostgreSQL UPDATE 的赋值目标不能带表别名前缀。删除 SET 左侧的限定,保留右侧表达式和 WHERE 中的别名,并区分复合字段路径与普通列。
PostgreSQL 用 WHERE 列 = MAX(列) 筛选时报聚合函数错误
PostgreSQL 用 WHERE 列 = MAX(列) 筛选时会报聚合函数位置错误。通过独立子查询取得最大编号,明确全局期次与符合条件期次的区别,避免直接改成 HAVING 后仍选错数据。
psycopg2 写 JSONB 报 can’t adapt type dict:显式选择 JSON 适配
JSONB 列不会替 psycopg2 自动适配 dict。用局部 Json 包装保留参数绑定,区分重复序列化、读写注册、JSON null 与 SQL NULL,并核对全局 hstore 冲突。
PostgreSQL identity 列插入 NULL 报 violates not-null constraint
PostgreSQL identity 列显式插入 NULL 不会触发自动编号。通过省略列或 DEFAULT 修正 SQL,并为 JDBC 自动编号与指定编号分别绑定参数。
PostgreSQL COPY 导入 CSV 报 Permission denied,文件却能在终端读取
CSV 在终端可读,SQL COPY 仍可能因数据库服务用户无法访问父目录而失败。区分服务端与 psql 客户端读取位置,用客户端导入并在提交前核对数据。
写了 depends_on 仍连不上 PostgreSQL:检查地址、就绪与初始化
区分容器启动、TCP 就绪和初始化完成,解释服务名、健康检查以及官方 PostgreSQL 镜像临时 socket 进程对连接失败的影响。
PostgreSQL LAST_VALUE 没有返回分组最后一个值
LAST_VALUE默认窗口帧只到当前排序同值组,可能跟随当前行变化。明确完整分区帧,并区分窗口计算、每组一行和最后非空值的不同要求。
psql 连接时报与用户名同名的数据库不存在
裸 psql 默认连接与数据库用户名同名的库,该库不存在时会报 FATAL。明确数据库参数,核对 socket、角色与实际实例,避免为消除错误误建空库。
PostgreSQL 换连接后 currval 报当前会话尚未定义
区分共享序列与会话局部取号状态,用 INSERT RETURNING 取得本次写入的 ID,避免读取全局状态或重置序列。


