PostgreSQL 数据导出流程

 更新时间:2026年07月04日 10:43:36   作者:shen12138  
在PostgreSQL中,数据导出可以通过多种方式实现,包括使用SQL命令、pg_dump工具以及第三方工具等,本文介绍PostgreSQL 数据导出流程,感兴趣的朋友跟随小编一起看看吧

导出PostgreSQL数据主要有三种方式,适用于不同的场景:pg_dump(逻辑备份)、COPY(数据导出)和pgAdmin(图形化操作)。

PostgreSQL 数据导出

在日常运维中,我们经常需要导出 PostgreSQL 数据库,可能是为了迁移、备份,或者给开发环境同步一份生产数据。但很多时候,数据库中总有一些「又大又没用」的表——比如日志表、历史记录表——导出它们既浪费时间又占用存储空间。

本文将介绍一套实用的 PostgreSQL 导出流程:先查看各表大小,再按需排除,精准导出

一、导出前:先查看哪些表大

在执行导出之前,先搞清楚数据库里到底有哪些「大表」,可以避免盲目导出。

SELECT
    schemaname,
    relname AS table_name,
    pg_size_pretty(pg_total_relation_size(relid)) AS total_size,
    pg_size_pretty(pg_relation_size(relid)) AS table_size,
    pg_size_pretty(pg_indexes_size(relid)) AS index_size,
    n_live_tup AS estimated_rows
FROM pg_stat_user_tables
WHERE schemaname = 'public'
ORDER BY pg_total_relation_size(relid) DESC;

这个查询会返回 public 模式下所有表的信息:

  • total_size:表总大小(含数据和索引)
  • table_size:纯数据大小
  • index_size:索引大小
  • estimated_rows:估算行数

执行完后,你就能清楚地看到哪些表是「空间大户」,从而决定哪些表的数据不需要导出。

二、执行导出:pg_dump 精准排除

pg_dump 是 PostgreSQL 自带的逻辑备份工具。

下面这条命令展示了如何只导出 public 模式下的表结构 + 部分表的数据,同时排除掉多个大表或不需要数据的表:

PGPASSWORD=postgres pg_dump \
  -U postgres \
  -h localhost \
  -d aiops \
  -n public \
  --no-owner \
  --no-privileges \
  --exclude-table-data='public.event_process_node' \
  --exclude-table-data='public.event' \
  --exclude-table-data='public.metrics_decimal_*_chunk' \
  --exclude-table-data='public.per_period_income_event' \
  --exclude-table-data='public.health_status_his' \
  --exclude-table-data='public.notify_his' \
  --exclude-table-data='public.notify_result' \
  --exclude-table-data='public.dial_indicator' \
  --exclude-table-data='public.res' \
  --exclude-table-data='public.res_probe' \
  -f public.sql

各参数说明

参数作用
PGPASSWORD=postgres通过环境变量指定密码(注意安全性)
-U postgres数据库用户名
-h localhost数据库主机地址
-d aiops要导出的数据库名称
-n public只导出 public 模式
--no-owner不输出设置对象所有权的命令
--no-privileges不输出权限相关的命令
--exclude-table-data='table_name'排除指定表的数据,但保留表结构
-f public.sql输出文件名

关于 --exclude-table-data 的几点说明:

  1. 只排除数据,不排除结构:被排除的表仍然会出现在导出文件中,但只有 CREATE TABLE 等结构定义,没有 INSERT 数据。
  2. 支持通配符:比如 public.metrics_decimal_*_chunk 可以匹配所有符合该模式的分区表。
  3. 可多次使用:每个要排除的表都需要单独写一个 --exclude-table-data

三、注意事项

  1. 密码安全:在命令行中直接使用 PGPASSWORD 环境变量存在安全风险。
  2. 版本一致性:导出和恢复时,尽量保持源库和目标库的 PostgreSQL 版本一致,避免兼容性问题。

总结

PostgreSQL 的导出其实可以很精细:先用查询摸清各表大小,再用 pg_dump 配合 --exclude-table-data 精准排除不需要的数据。这套「先查后导」的流程既能节省导出时间,又能控制备份文件的大小,值得在实际工作中推广使用。

如何选择合适的方式?

场景推荐工具原因
备份整个数据库或跨版本迁移pg_dump生成逻辑备份,与数据库版本无关,恢复灵活-。
导出单张表或查询结果为CSV进行分析COPY 或 \copy最高效,直接生成目标格式文件-。
需要精细控制导出内容(如只导结构)pg_dump提供丰富的命令行选项,如 --schema-only
不熟悉命令行,偏好图形界面pgAdmin操作直观,易上手-。
导出整个数据库集群的所有全局对象pg_dumpall这是唯一能同时备份角色、表空间等全局对象的方法。

到此这篇关于PostgreSQL 数据导出的文章就介绍到这了,更多相关postgresql 数据导出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PostgreSQL中实现自增的三种方式举例

    PostgreSQL中实现自增的三种方式举例

    很多小伙伴在把mysql数据库里面的表导入pgsql数据库的时候,会遇到新增数据的时候id不自增,这篇文章主要给大家介绍了关于PostgreSQL中实现自增的三种方式,需要的朋友可以参考下
    2024-02-02
  • PostgreSQL function返回多行的操作

    PostgreSQL function返回多行的操作

    这篇文章主要介绍了PostgreSQL function返回多行的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • PostgreSQL 别名的使用

    PostgreSQL 别名的使用

    本文全面介绍PostgreSQL中的别名功能,包含列别名、表别名和CTE别名三大类型,文章详细展示了各类别名的语法和应用场景,具有一定的参考价值,感兴趣的可以了解一下
    2025-11-11
  • PostgreSQL图(graph)的递归查询实例

    PostgreSQL图(graph)的递归查询实例

    这篇文章主要给大家介绍了关于PostgreSQL图(graph)的递归查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用PostgreSQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • PostgreSQL主从搭建的实现步骤

    PostgreSQL主从搭建的实现步骤

    本文主要介绍了一主一从PostgreSQL架构,配置流复制账户及主从参数文件,执行基础备份,检查复制槽和节点状态以确认搭建成功,下面就来具体介绍一下,感兴趣的可以了解一下
    2025-07-07
  • postgresql 中的序列nextval详解

    postgresql 中的序列nextval详解

    这篇文章主要介绍了postgresql 中的序列nextval详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Postgres数据库安装、配置、使用DBLink的实例详解

    Postgres数据库安装、配置、使用DBLink的实例详解

    文章介绍PostgreSQL的DBLink技术,用于跨数据库实例查询,解决数据分散问题,支持多种数据库类型,安装需检查插件并配置连接参数,便于实现多实例数据汇总,感兴趣的朋友跟随小编一起看看吧
    2025-07-07
  • 常用 PostgreSQL 预防数据丢失解决方案

    常用 PostgreSQL 预防数据丢失解决方案

    这篇文章主要介绍了常用 PostgreSQL 预防数据丢失方案,本篇主要介绍关于 DDL 和 DML 操作,如何预防数据丢失的方案,需要的朋友可以参考下
    2022-01-01
  • PostgreSQL中数据批量导入导出的错误处理

    PostgreSQL中数据批量导入导出的错误处理

    在 PostgreSQL 中进行数据的批量导入导出是常见的操作,但有时可能会遇到各种错误,下面将详细探讨可能出现的错误类型、原因及相应的解决方案,并提供具体的示例来帮助您更好地理解和处理这些问题,需要的朋友可以参考下
    2024-07-07
  • Postgresql设置远程访问的方法(需要设置防火墙或者关闭防火墙)

    Postgresql设置远程访问的方法(需要设置防火墙或者关闭防火墙)

    这篇文章主要介绍了Postgresql设置远程访问的方法(需要设置防火墙或者关闭防火墙),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03

最新评论