杂散换行会破坏转储/恢复时的源代码

ua.*_*ker 6 postgresql dump restore

简而言之:转储/恢复过程使我的functions\xe2\x80\x99源代码看起来很难看!天知道为什么,但是某些东西在我格式精美的源代码中添加了额外的换行符,这让我非常生气(并且使阅读我的代码变得更加困难)。只是恢复数据库后发生的情况的一个小例子:

\n\n
CREATE OR REPLACE FUNCTION f_tr_std()\n  RETURNS trigger AS\n$BODY$\n\n\n\n\n\n\n\nbegin\n\n\n\n\n\n\n\n  /* Standard trigger function */\n\n\n\n\n\n\n\n  if ( tg_when <> \'BEFORE\' ) then\n\n\n\n\n\n\n\n    raise exception \'This must be a "before"-trigger only: "%"\', tg_name;\n\n\n\n\n\n\n\n  end if;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  if ( tg_level <> \'ROW\' ) then\n\n\n\n\n\n\n\n    raise exception \'This must be a row-level trigger: "%"\', tg_name;\n\n\n\n\n\n\n\n  end if;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nend;\n\n\n\n\n\n\n\n$BODY$\n  LANGUAGE plpgsql VOLATILE\n  COST 100;\nALTER FUNCTION f_tr_std() OWNER TO postgres;\n
Run Code Online (Sandbox Code Playgroud)\n\n

页眉和页脚由 pgAdmin 生成。剩下的就是我自己的代码了。

\n\n

PG 版本:9.0.1\n操作系统:Windows XP

\n\n

我用于转储的bat文件的内容:

\n\n
@echo off\nset curr_dir=%CD%\npg_dump --blobs --format=c --compress=9 --verbose --host=localhost --port=5432 -U postgres rc2_dev > "%curr_dir%\\dump.bak"\npause\n
Run Code Online (Sandbox Code Playgroud)\n\n

我认为用于恢复的bat文件的内容是无关紧要的,因为转储源内部已经损坏。

\n\n

我完全不知道是什么导致了如此奇怪的行为!任何帮助将非常感激。

\n

Chr*_*ers 1

我敢打赌,问题不在于转储/恢复,而在于 PostgreSQL 和其他 Windows 程序之间的行尾处理。请记住,Windows 使用 CRLF 表示 EOL,即两个字符宽,而 UNIX 使用 CR,Mac 使用 LF。这并不是第一次工具链中其他地方的行尾被不恰当地破坏。

首先要做的是检查数据库中的源代码。对于上面的函数,这将是一个很好的起点:

SELECT pro_src FROM pg_proc WHERE proname = 'f_tr_std'; 
Run Code Online (Sandbox Code Playgroud)

只有两种可能。EOL 要么被损坏,要么没有。如果它们被损坏,请检查工具链的其余部分。如果不是,请检查转储和恢复之间使用的每个程序。