[Bucardo-general] bucardo fails to replicate when the column name contains german umlauts
Christian Ritter
lnxlists at lownoize.org
Mon Sep 2 11:36:01 UTC 2013
On 2013-09-02 11:49, Michelle Sullivan wrote:
> Christian Ritter wrote:
>> I have switched the query log on, and it looks like bucardo has
>> problems with reading the data from the source database.
>>
>>
>> my insert into database testa:
>> 2013-09-02 11:08:28 CEST LOG: statement: INSERT INTO testtable
>> VALUES
>> (1, '192.168.1.1', 'foobar');
>>
>> what bucardo tries to insert into database testb:
>> 2013-09-02 11:08:29 CEST LOG: execute dbdpg_p14740_6: INSERT INTO
>> public.testtable (id, host_ip,"prüfsumme") VALUES ($1,$2,$3)
>> 2013-09-02 11:08:29 CEST DETAIL: parameters: $1 = '1', $2 =
>> '192.168.1.1', $3 = NULL
>> 2013-09-02 11:08:29 CEST ERROR: null value in column "prüfsumme"
>> violates not-null constraint
>> 2013-09-02 11:08:29 CEST STATEMENT: INSERT INTO public.testtable
>> (id,
>> host_ip,"prüfsumme") VALUES ($1,$2,$3)
>>
>> prüfsumme is quoted with "" which looks ok.
>>
>> client encoding is set to utf8:
>>
>> testa=# SHOW client_encoding;
>> client_encoding
>> -----------------
>> UTF8
>> (1 row)
>>
>
>
> Now that's more like it.. I'm betting the issue therefore is in the
> bucardo_delta function(s) that insert the data into the table.
>
> On the source machine try the following (assuming 4.5.x - I don't
> know
> on 4.99.7 except this won't work):
>
> SELECT * FROM bucardo.bucardo_delta WHERE rowid = '1'::text AND
> rowid2 =
> '192.168.1.1'::text;
>
> this will give you the rows in the bucardo_delta table and you should
> be
> able to see if the source data is actually NULL.
>
> If it is and there are no other rows the problem will likely be in
> the
> delta() functions. If not the the read of the data is incorrect. If
> there are multiple rows and one is null (earliest txntime) then it
> may
> be because you changed the column/table definition after a delta was
> created and not replicated - in which case you will need to remove
> the
> rows with something like:
>
> DELETE FROM bucardo.bucardo_delta WHERE rowid = '1'::text AND rowid2
> =
> '192.168.1.1'::text AND rowid3 IS NULL; (if there are other tables
> you
> will need to specify the table OID in the DELETE as well. Table OIDs
> can be obtained on the source with something like:
>
> =# select relname, oid from pg_class where relname = 'hosts2evid';
> relname | oid
> ------------+-------
> hosts2evid | 32596
> (1 row)
>
> Regards,
>
> Michelle
bucardo delta looks good to me, so it looks like bucardo is unable to
read the data if there are umlauts in the column name.
testa=# SELECT * from bucardo_delta;
tablename | rowid | txntime
-----------+-------+-------------------------------
28039 | 1 | 2013-09-02 13:23:12.344017+02
(1 row)
testa=# select relname, oid from pg_class where relname = 'testtable';
relname | oid
-----------+-------
testtable | 28039
testa=# SELECT * from testtable;
id | host_ip | prüfsumme
----+-------------+-----------
1 | 192.168.1.1 | foobar
(1 row)
Cheers
Christian
More information about the Bucardo-general
mailing list