2010-11-11 32 views
1

簡潔:轉儲/恢復流程使我的功能的源代碼看起來很醜!上帝知道爲什麼,但是某種東西給我的格式精美的源代碼添加了額外的換行符,這讓我非常生氣(並且使代碼更難讀)。只是我恢復數據庫後發生的一些小例子:流水線打破轉儲/恢復源代碼

CREATE OR REPLACE FUNCTION f_tr_std() 
    RETURNS trigger AS 
$BODY$ 







begin 







    /* Standard trigger function */ 







    if (tg_when <> 'BEFORE') then 







    raise exception 'This must be a "before"-trigger only: "%"', tg_name; 







    end if; 















    if (tg_level <> 'ROW') then 







    raise exception 'This must be a row-level trigger: "%"', tg_name; 







    end if; 















end; 







$BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100; 
ALTER FUNCTION f_tr_std() OWNER TO postgres; 

頁眉和頁腳由pgAdmin生成。剩下的就是我自己的代碼。

PG版本:9.0.1 操作系統:Windows XP

BAT文件的內容我用轉儲:bat文件的

@echo off 
set curr_dir=%CD% 
pg_dump --blobs --format=c --compress=9 --verbose --host=localhost --port=5432 -U postgres rc2_dev > "%curr_dir%\dump.bak" 
pause 

內容的恢復是無關緊要的,我想,是因爲裏面的轉儲源已損壞。

我完全不知道是什麼原因導致了這種奇怪的行爲!任何幫助將非常感激。

+0

而不是使用圖像來說明,也許使用報價。舉個例子,我背後是一個嚴重的防火牆,它阻擋了很多圖像。此外,鏈接隨着時間的推移變得陳舊,使得您的問題在未來不再有價值。 – 2010-11-11 12:38:51

+0

嗯,我認爲我的防火牆是其中最嚴重的:)源代碼非常糟糕,我決定使用圖像:) – 2010-11-11 12:44:48

+0

PostgreSQL,pg_dump,pg_restore/psql和pgAdmin的哪些版本使用?你用什麼參數來設置pg_dump?你有沒有檢查你的轉儲,看看你的函數如何存儲在這個轉儲? – 2010-11-11 12:49:45

回答

0

我敢打賭,問題不在於轉儲/恢復,而是在PostgreSQL和其他Windows程序之間進行行結束處理。請記住,Windows使用CRLF作爲兩個字符的EOL,而UNIX使用CR和Mac使用LF。這不會是第一次在工具鏈的其他地方不適當地損壞線路。

首先要做的是檢查數據庫中的源代碼。對於上面的功能,這將是一個很好的起點:

SELECT pro_src FROM pg_proc WHERE proname = 'f_tr_std'; 

只有兩種可能性。無論是EOL在那裏都受到了破壞,或者他們沒有。如果它們受到損壞,請檢查工具鏈的其餘部分。如果不是,請在轉儲和恢復之間檢查您正在使用的每個程序。