2015-06-21 41 views
2

我有一臺帶有Django應用程序和Postgresql數據庫的生產服務器(ec2)。 我每晚都用pg_dump備份數據庫備份數據庫。Postgresql:如何應用pg_dump --exclude-table-data補丁?

sudo -u postgres pg_dump --column-inserts --data-only mydb > mybackup.sql 

Postgres提供忽略一些表的可能性要備份(表架構+數據:--exclude表= TABLE)

不過,我有一些表格,我想他們的備份架構但不是他們的數據,我只想用空數據轉儲表,​​舊數據根本不重要,但是如果轉儲它們會使備份文件變大。

有一個補丁「exclude-table-data=TABLE」,它允許用戶讓pg_dump 排除表的數據但不包含DDL。其中一個用例是非常頻繁更換的非常大的表,其中經常會浪費和不必要的傾銷數據 。

我想知道如何應用此修補程序而不會在我的生產服務器上丟失任何數據庫上的數據。

+1

'pg_dump --schema-only'會轉儲所有的DDL,通常這不是很大,幾百千字節。始終保持良好狀態,也可以跟蹤架構更改。 – wildplasser

回答

1

我發現了一個更好的解決方案,升級到PostgreSQL的版本9.2或更高,我發現了一個安全的方式這樣做:(升級PostgreSQL的9.1至9.3在Ubuntu 12.04)

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。

Reference

後來我意識到,由於我使用--data-only,因爲我忽略了模式,所以--exclude-table和--exclude-table-data會產生相同的效果!

2

exclude-table-data現在的pg_dump和PostgreSQL 9.2+常規選項,因此如果你的服務器是最新的版本,這已經是可用的(參見文檔頁面:http://www.postgresql.org/docs/9.2/static/app-pgdump.html

+0

謝謝你的迴應。我的PostgresSQL版本是9.1.14! –

+1

然後,最簡單最方便的方法就是規劃升級到更新的PostgreSQL版本。 'pg_upgrade'使這更容易。雖然你可以從9.2(或9.4)安裝'pg_dump'並在你的9.1數據庫上使用它,但是當你在9.1分貝上恢復使用pg_dump 9.2創建的轉儲時,你可能會遇到問題。 –