我有一个带有Django App和Postgresql数据库的生产服务器(ec2)。 我每晚使用pg_dump进行数据库备份,后者备份表数据。
sudo -u postgres pg_dump --column-inserts --data-only mydb > mybackup.sql
Postgres提供了忽略一些要备份的表的可能性(表模式+数据: - exclude-table = TABLE)
但是我有一些表,我想备份他们的架构而不是他们的数据,我只想用空数据转储表,旧数据根本不重要,但是如果转储它们会使备份文件变得很大
有一个补丁“exclude-table-data=TABLE”允许用户拥有pg_dump 排除数据但不排除表的DDL。一个用例就是这个 大型表,不经常更改,并为其转储数据 经常是浪费和不必要的。
我想知道如何应用此补丁而不会在我的生产服务器上丢失任何数据库。
答案 0 :(得分:3)
H[15] #=> "Bar"
H[35] #=> "Quux"
现在是PostgreSQL 9.2+中exclude-table-data
的常规选项,因此如果您的服务器是最新版本,则它已经可用(请参阅文档页面:http://www.postgresql.org/docs/9.2/static/app-pgdump.html)
答案 1 :(得分:1)
我找到了一个更好的解决方案,将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会产生相同的效果,因为我忽略了模式!