Обсуждение: LATIN2->UTF8 conversation with dblink
Hi, The situation: We've got two machines. The source database (DB) is running on an RHEL 5.x machine with PSQL 8.1.11. The destination DB is running on SuSE 11.0 with PSQL 8.3.x. The mechines are relative far away each other and there is a 2Mbps WAN line between them. The DB is the same except the character coding. Source is LATIN2 and the target DB is UTF8. We wrote a trigger to copy the data from source to target with dblink. The problem is the different DB character coding! PGSQL complains about wrong byte order. It is trivial. If the trigger is interesting I can copy here, of course. What could be the solution? Of course I can't change the default machine char code, easily. TIA, Ruzsi Ps.: I've got an other question about our trigger making dblink "permanent" but the char coding is the most interesting for us.
Ruzsinszky Attila <ruzsinszky.attila@gmail.com> writes: > The situation: > We've got two machines. The source database (DB) is running on an RHEL > 5.x machine > with PSQL 8.1.11. The destination DB is running on SuSE 11.0 with PSQL 8.3.x. > The mechines are relative far away each other and there is a 2Mbps WAN > line between them. > The DB is the same except the character coding. Source is LATIN2 and > the target DB is UTF8. > We wrote a trigger to copy the data from source to target with dblink. > The problem is the > different DB character coding! PGSQL complains about wrong byte order. Hmm. You can presumably fix this by setting client_encoding in the dblink connection to match the encoding in use in the database it's called in. But I wonder why dblink doesn't just do that for you automatically. regards, tom lane
On Feb 2, 2009, at 1:31 PM, Tom Lane wrote: > Ruzsinszky Attila <ruzsinszky.attila@gmail.com> writes: >> The situation: >> We've got two machines. The source database (DB) is running on an >> RHEL >> 5.x machine >> with PSQL 8.1.11. The destination DB is running on SuSE 11.0 with >> PSQL 8.3.x. >> The mechines are relative far away each other and there is a 2Mbps >> WAN >> line between them. > >> The DB is the same except the character coding. Source is LATIN2 and >> the target DB is UTF8. >> We wrote a trigger to copy the data from source to target with >> dblink. >> The problem is the >> different DB character coding! PGSQL complains about wrong byte >> order. > > Hmm. You can presumably fix this by setting client_encoding in the > dblink connection to match the encoding in use in the database it's > called in. But I wonder why dblink doesn't just do that for you > automatically. > > regards, tom lane > We did it like this: INSERT INTO a tbl_datafeed SELECT nextval('acc_mkt.tbl_ants_to_ace_feed_row_id_seq'), convert(project_number::bytea, 'WIN1258'::text, 'UTF8'::text), convert(project_name::bytea, 'WIN1258'::text, 'UTF8'::text), ... .... ... FROM dblink('dbname=mydbname host=removehost user=someuser','SELECT * FROM tbl_datafeed') AS p ( ... .. ... .) Ries
Tom Lane wrote: > Ruzsinszky Attila <ruzsinszky.attila@gmail.com> writes: >> The DB is the same except the character coding. Source is LATIN2 and >> the target DB is UTF8. >> We wrote a trigger to copy the data from source to target with dblink. >> The problem is the >> different DB character coding! PGSQL complains about wrong byte order. > > Hmm. You can presumably fix this by setting client_encoding in the > dblink connection to match the encoding in use in the database it's > called in. But I wonder why dblink doesn't just do that for you > automatically. Mainly because I never thought about it myself before, and this is the first time I've seen someone complain ;-) But if you think automatically setting client encoding is appropriate, I will make the change. Would it be classified as a bug (and therefore something to backpatch) or a new feature? Joe
Joe Conway <mail@joeconway.com> writes: > Tom Lane wrote: >> Hmm. You can presumably fix this by setting client_encoding in the >> dblink connection to match the encoding in use in the database it's >> called in. But I wonder why dblink doesn't just do that for you >> automatically. > But if you think automatically setting client encoding is appropriate, I > will make the change. Would it be classified as a bug (and therefore > something to backpatch) or a new feature? You could make an argument either way; but given that we're not seeing vast demand in this thread, I think I'd vote for not changing behavior in the back branches. It'd be good to get it into 8.4 though. regards, tom lane