PG_DUMP 问题记录

在尝试使用pg_dump进行数据库备份时遇到了错误:column p.proisagg does not exist。该问题可能是由于客户端与服务端的版本不一致造成的。错误提示表明可能需要引用的是列名'p.prolang'而非'p.proisagg'。解决方案通常涉及更新客户端到与服务端相匹配的版本,或者调整备份脚本来适应现有数据库的结构。

pg_dump: [archiver (db)] query failed: ERROR:  column p.proisagg does not exist
LINE 1: ...g_proc'::regclass AND pip.objsubid = 0) WHERE NOT p.proisagg
                                                             ^
HINT:  Perhaps you meant to reference the column "p.prolang".
pg_dump: [archiver (db)] query was: SELECT p.tableoid, p.oid, p.proname, p.prolang, p.pronargs, p.proargtypes, p.prorettype, (SELECT pg_catalog.array_agg(acl ORDER BY row_n) FROM (SELECT acl, row_n FROM pg_catalog.unnest(coalesce(p.proacl,pg_catalog.acldefault('f',p.proowner))) WITH ORDINALITY AS perm(acl,row_n) WHERE NOT EXISTS ( SELECT 1 FROM pg_catalog.unnest(coalesce(pip.initprivs,pg_catalog.acldefault('f',p.proowner))) AS init(init_acl) WHERE acl = init_acl)) as foo) AS proacl, (SELECT pg_catalog.array_agg(acl ORDER BY row_n) FR

### Windows PostgreSQL 迁移到 Linux PostgreSQL 的方法及 `pg_dump` 命令位置 在 Windows 和 Linux 系统之间迁移 PostgreSQL 数据库时,可以使用 `pg_dump` 工具导出数据库,并通过 `psql` 或 `pg_restore` 在目标系统上恢复数据。以下是详细说明: #### 1. 使用 `pg_dump` 导出数据库 在 Windows 系统中,执行以下命令以导出数据库为 SQL 文件: ```bash pg_dump -U 用户名 -d 数据库名称 -f 备份文件.sql ``` 此命令将指定的数据库内容导出到一个 SQL 文件中[^5]。如果需要跨版本兼容性或处理大容量数据库,可以使用自定义格式导出: ```bash pg_dump -Fc -U 用户名 -d 数据库名称 -f 备份文件.dump ``` #### 2. 将备份文件传输到 Linux 系统 可以使用工具如 `scp` 将生成的 SQL 文件从 Windows 传输到 Linux 系统: ```bash scp 备份文件.sql 用户名@LinuxIP:/目标路径/ ``` #### 3. 在 Linux 系统上导入数据库 在目标 Linux 系统上,首先创建一个新的空数据库: ```bash createdb -U postgres 新数据库名称 ``` 然后使用 `psql` 工具将 SQL 文件中的数据导入到新数据库中: ```bash psql -U postgres -d 新数据库名称 -f /目标路径/备份文件.sql ``` 如果使用的是自定义格式的备份文件,则需要使用 `pg_restore` 工具进行恢复: ```bash pg_restore -U postgres -d 新数据库名称 -f /目标路径/备份文件.dump ``` #### 4. 验证数据完整性 完成导入后,可以通过查询表记录数或检查特定数据项来验证数据是否正确迁移: ```sql SELECT COUNT(*) FROM 表名; ``` #### `pg_dump` 命令的执行位置 - 在 Windows 系统中,`pg_dump` 通常位于 PostgreSQL 安装目录下的 `bin` 文件夹中。例如:`C:\Program Files\PostgreSQL\版本号\bin\pg_dump.exe`。 - 在 Linux 系统中,`pg_dump` 是 PostgreSQL 的默认工具之一,安装 PostgreSQL 后即可直接在终端中使用。 #### 注意事项 确保源和目标系统的 PostgreSQL 版本兼容性。如果版本差异较大,可能需要调整导出选项以确保兼容性。例如,使用自定义格式导出数据。 ### 示例代码:完整迁移流程 在 Windows 上导出数据库: ```bash pg_dump -U postgres -d 源数据库名称 -f 数据库备份.sql ``` 将备份文件传输到 Linux 系统: ```bash scp 数据库备份.sql 用户名@LinuxIP:/home/用户名/ ``` 在 Linux 系统上创建新数据库并导入数据: ```bash createdb -U postgres 目标数据库名称 psql -U postgres -d 目标数据库名称 -f /home/用户名/数据库备份.sql ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值