ua.*_*ker 6 postgresql dump restore
简而言之:转储/恢复过程使我的functions\xe2\x80\x99源代码看起来很难看!天知道为什么,但是某些东西在我格式精美的源代码中添加了额外的换行符,这让我非常生气(并且使阅读我的代码变得更加困难)。只是恢复数据库后发生的情况的一个小例子:
\n\nCREATE 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;\nRun Code Online (Sandbox Code Playgroud)\n\n页眉和页脚由 pgAdmin 生成。剩下的就是我自己的代码了。
\n\nPG 版本: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\nRun Code Online (Sandbox Code Playgroud)\n\n我认为用于恢复的bat文件的内容是无关紧要的,因为转储源内部已经损坏。
\n\n我完全不知道是什么导致了如此奇怪的行为!任何帮助将非常感激。
\n我敢打赌,问题不在于转储/恢复,而在于 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 要么被损坏,要么没有。如果它们被损坏,请检查工具链的其余部分。如果不是,请检查转储和恢复之间使用的每个程序。