Некоторые версии DBD::Pg (старые) имеют очень весёлую особенность — utf-8 строки из базы приходят с неустановленным флагом utf8.
В текущей версии (2.19 к примеру) надо использовать pg_enable_utf8 — $dbh->{pg_enable_utf8}; в следующей версии (3) будут изменения:
http://blog.endpoint.com/2011/06/dbdpg-utf-8-for-postgresql.html объясняет в чём дело и что будет новой версии DBD::Pg. Вкратце, если на выходе из DBD::Pg появляются странные крякозябры, надо попробовать добавить $dbh->{pg_utf8_strings } = 1; там же упоминается устаревший флаг pg_enable_utf8 — в новой бете он объявляется deprecated.
@@ -1,17 +1,5 @@ 'GSM' is Greg Sabino Mullane, greg@turnstep.com) -Version 2.99.9_1 (will be 3.0.0) - - - Cleanup and overhaul the UTF-8 support. Use the server_encoding to - determine if we set the internal utf8 flag on text from the database. - Default to always doing so unless using SQL_ASCII. - - - Replace pg_enable_utf8 with pg_utf8_strings [GSM]