2008-11-14 80 views

回答

0

首先,不要在生產數據庫上這樣做。

正確的方法是使用事務處理他們的價值。在postgres中,你甚至可以使用保存點(你可以回滾到)來嵌套它們。

test=# create table foo (foo_id serial primary key, bar varchar); 
NOTICE: CREATE TABLE will create implicit sequence "foo_foo_id_seq" for serial column "foo.foo_id" 
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index "foo_pkey" for table "foo" 
CREATE TABLE 
test=# begin; insert into foo (bar) values ('test'); 
BEGIN 
INSERT 0 1 
test=# savepoint sp1; 
SAVEPOINT 
test=# insert into foo (foo_id, bar) values (1, 'test'); 
ERROR: duplicate key value violates unique constraint "foo_pkey" 
test=# rollback to sp1; 
ROLLBACK 
test=# select * from foo; 
foo_id | bar 
--------+------ 
     1 | test 
test=# -- note that you're still in a transaction 

如果這不適合(由於軟件的限制或其他原因),你可以始終保持你的數據庫的幾個轉儲在其中您可以輕鬆地恢復文件;和/或有一個腳本,可以將生產數據庫自動轉儲到本地測試數據庫中。另外,一定要記住要在版本控制中保留模式更改(或者最低限度使用一些.sql文件);在使用測試數據庫開發新的功能後,可以輕鬆更新生產數據庫。

PITR主要用於熱備份/備份目的。

0

PITR

由於是爲在線備份方案,它意味着不中斷操作,然後能夠恢復在災難發生時的數據,而不是用於測試應用程序創建備份。數據的恢復不在線,而且相當複雜。

我認爲測試的正確方法是讓數據庫可以輕鬆地垃圾並從標準備份中恢復,然後您可以在自動化中使用標準備份/恢復腳本重複測試。否則,另一種測試方法是使用事務。您將進行的每個測試都將包含在執行測試後回滾的事務中。

BEGIN; 
SELECT ... 
INSERT ... 
UPDATE ... 
DELETE ... 

<Here go queries to check if everything is alright, setting the test result> 
ROLLBACK 
+0

是的,生病嘗試。 DBA告訴我恢復相同的轉儲文件非常簡單快捷。 謝謝。 – Danmaxis 2008-11-14 13:33:50

+0

如果沒有辦法在postgresql上設置還原點(比如oracle),我會通過你的回答。 – Danmaxis 2008-11-14 13:36:16

相關問題