Postgresql:如何应用pg_dump --exclude-table-数据补丁?
Postgresql: How to apply pg_dump --exclude-table-data patch?
我有一个带有 Django 应用程序和 Postgresql 数据库的生产服务器 (ec2)。
我每晚使用 pg_dump 进行数据库备份,备份 tables 数据。
sudo -u postgres pg_dump --column-inserts --data-only mydb > mybackup.sql
Postgres 提供了忽略某些 tables 被备份的可能性 (tables schema + data: --exclude-table=TABLE)
但是我有一些 tables,我想备份他们的架构而不是他们的数据,我只想转储空数据的 table,旧数据并不重要全部,但是如果转储它们会使备份文件变大。
有一个补丁“exclude-table-data=TABLE”允许用户拥有 pg_dump
排除数据但不排除 table 的 DDL。一个用例是一个非常
large table 不经常更改,并为其转储数据
经常是浪费和不必要的。
我想知道如何在不丢失生产服务器上数据库的任何内容的情况下应用此补丁。
exclude-table-data
现在是 PostgreSQL 9.2+ 中 pg_dump
的常规选项,因此如果您的服务器是最新版本,它已经可用(请参阅文档页面:http://www.postgresql.org/docs/9.2/static/app-pgdump.html)
我找到了一个更好的解决方案,将 PostgreSQL 升级到 9.2 或更高版本,并且我找到了一个安全的方法:(在 Ubuntu 12.04 上将 PostgreSQL 9.1 升级到 9.3)
echo "deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-9.3 postgresql-server-dev-9.3 postgresql-contrib-9.3 -y
sudo su - postgres -c "psql template1 -p 5433 -c 'CREATE EXTENSION IF NOT EXISTS hstore;'"
sudo su - postgres -c "psql template1 -p 5433 -c 'CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";'"
sudo su - postgres -c "service postgresql stop"
sudo su - postgres -c '/usr/lib/postgresql/9.3/bin/pg_upgrade -b /usr/lib/postgresql/9.1/bin -B /usr/lib/postgresql/9.3/bin -d /var/lib/postgresql/9.1/main/ -D /var/lib/postgresql/9.3/main/ -O "-c config_file=/etc/postgresql/9.3/main/postgresql.conf" -o "-c config_file=/etc/postgresql/9.1/main/postgresql.conf"'
sudo apt-get remove postgresql-9.1 -y
sudo sed -i "s:5433:5432:g" /etc/postgresql/9.3/main/postgresql.conf
sudo service postgresql restart
注意:这将同时安装 PostgreSQL 9.3 和 9.4,因此请在完成后删除 PostgreSQL 9.4 或更改以上代码以升级到版本 9.4。
后来我意识到,因为我使用的是 --data-only,--exclude-table 和 --exclude-table-data 会产生相同的效果,因为我' m 忽略架构 !
我有一个带有 Django 应用程序和 Postgresql 数据库的生产服务器 (ec2)。 我每晚使用 pg_dump 进行数据库备份,备份 tables 数据。
sudo -u postgres pg_dump --column-inserts --data-only mydb > mybackup.sql
Postgres 提供了忽略某些 tables 被备份的可能性 (tables schema + data: --exclude-table=TABLE)
但是我有一些 tables,我想备份他们的架构而不是他们的数据,我只想转储空数据的 table,旧数据并不重要全部,但是如果转储它们会使备份文件变大。
有一个补丁“exclude-table-data=TABLE”允许用户拥有 pg_dump 排除数据但不排除 table 的 DDL。一个用例是一个非常 large table 不经常更改,并为其转储数据 经常是浪费和不必要的。
我想知道如何在不丢失生产服务器上数据库的任何内容的情况下应用此补丁。
exclude-table-data
现在是 PostgreSQL 9.2+ 中 pg_dump
的常规选项,因此如果您的服务器是最新版本,它已经可用(请参阅文档页面:http://www.postgresql.org/docs/9.2/static/app-pgdump.html)
我找到了一个更好的解决方案,将 PostgreSQL 升级到 9.2 或更高版本,并且我找到了一个安全的方法:(在 Ubuntu 12.04 上将 PostgreSQL 9.1 升级到 9.3)
echo "deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-9.3 postgresql-server-dev-9.3 postgresql-contrib-9.3 -y
sudo su - postgres -c "psql template1 -p 5433 -c 'CREATE EXTENSION IF NOT EXISTS hstore;'"
sudo su - postgres -c "psql template1 -p 5433 -c 'CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";'"
sudo su - postgres -c "service postgresql stop"
sudo su - postgres -c '/usr/lib/postgresql/9.3/bin/pg_upgrade -b /usr/lib/postgresql/9.1/bin -B /usr/lib/postgresql/9.3/bin -d /var/lib/postgresql/9.1/main/ -D /var/lib/postgresql/9.3/main/ -O "-c config_file=/etc/postgresql/9.3/main/postgresql.conf" -o "-c config_file=/etc/postgresql/9.1/main/postgresql.conf"'
sudo apt-get remove postgresql-9.1 -y
sudo sed -i "s:5433:5432:g" /etc/postgresql/9.3/main/postgresql.conf
sudo service postgresql restart
注意:这将同时安装 PostgreSQL 9.3 和 9.4,因此请在完成后删除 PostgreSQL 9.4 或更改以上代码以升级到版本 9.4。
后来我意识到,因为我使用的是 --data-only,--exclude-table 和 --exclude-table-data 会产生相同的效果,因为我' m 忽略架构 !