Your server encoding seems to be UTF8.
I suspect your client_encoding does not match, which might give you a wrong impression of what you are dealing with. Check with:
SHOW client_encoding; -- in your actual session
The rest of the tool chain has to be in sync, too. When using puTTY, for instance, one has to make sure, the terminal agrees with the rest: Change settings... Window -> Translation -> Remote character set = UTF-8.
As for your first question, you already have the best solution. A couple of umlauts are best replaced with a string of replace() statements.
As you seem to know already as well, single character replacements are more efficient with (a single) translate() statement.
I'm not so sure about the client/server encoding mismatch. In my experience, those kinds of mapping failures usually give "character has no equivalent" errors. "Invalid byte sequence" sounds more like the client_encoding is set to UTF8, but the client program is still sending ANSI data.
@NickBarnes: Well, the client sends data encoded according to the clent_encoding. client_encoding goes both ways. So we are probably talking about the same thing here.
Not quite. The server interprets the client's data according to the client_encoding, but the client can send whatever it wants. For example, if I fire up psql in Windows, it defaults to WIN1252. If I run SET client_encoding TO 'UTF8' and SELECT '', I get an "invalid byte sequence" error. psql has no idea that anything has changed; it's still sending its data as ANSI.
@NickBarnes: Good point. My description in the previous comment was not quite correct. When using puTTY, for instance, one has to make sure, the terminal agrees with the rest ... Change settings... Window -> Translation -> Remote character set: UTF-8
@Erwin: That's the point. i am using SuperPutty and had to change character set to UTF-8. Though the problem should be solved - but: Select an address with an umlaut inside the street, the umlaut still isn't displayed correctly. Instead I am getting instead of . However, my problem is solved. Thank y'all!