From: | Tomas Vondra <tv(at)fuzzy(dot)cz> |
---|---|
To: | pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: issues with range types, btree_gist and constraints |
Date: | 2013-02-04 21:04:48 |
Message-ID: | 51102270.6050105@fuzzy.cz |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi,
I've managed to further simplify the test-case, and I've verified that
it's reproducible on current 9.2 and 9.3 branches.
This is the necessary table structure:
-----------------------------------------------------------------------
CREATE TABLE test (
id TEXT,
valid TSRANGE NOT NULL DEFAULT tsrange(NULL, NULL),
CONSTRAINT unique_ids EXCLUDE USING GIST (id WITH =, valid WITH &&)
);
CREATE OR REPLACE FUNCTION skip_existing() RETURNS trigger AS $$
DECLARE
v_exists BOOLEAN;
BEGIN
SELECT TRUE INTO v_exists FROM test WHERE id = NEW.id;
IF v_exists THEN
RETURN NULL;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER skip_existing BEFORE INSERT ON test FOR EACH ROW EXECUTE
PROCEDURE skip_existing();
-----------------------------------------------------------------------
I've been unable to reproduce the bug with just a single text column.
The trigger simply skips existing records without throwing any error.
Now let's insert some data into the table - I'll use the same samples as
in the previous test-case (http://www.fuzzy.cz/tmp/samples.tgz).
test=# copy test(id) from '/tmp/sample-1.csv';
COPY 20001
test=# copy test(id) from '/tmp/sample-2.csv';
COPY 18590
test=# copy test(id) from '/tmp/sample-1.csv';
COPY 25
test=# copy test(id) from '/tmp/sample-2.csv';
COPY 45
The last two results are really suspicious - it means that some record
were inserted "again", so let's verify that:
test=# select id, count(*) from test group by id having count(*) > 1;
id | count
----------------------------------+-------
0aab4791e1e41f62fd8452ae2c854a34 | 2
0aa08441cd4526b972bb3451d9f8e4ea | 2
0ab969a3333342837484ec0f81bf1e03 | 2
0aea0c33c76b1fe5d123b18cec184dc0 | 2
0af75a99b37be6dde08afaa69de36d29 | 2
0af80d2c2931756b897b3ca5a0055820 | 2
... many more ...
On 9.3 the number of duplicates is much lower, and it's not stable - on
one run I get 6, on the very next one I get 2, then 5 and so on. That
leads me to a suspicion that it might be an uninitialized variable or
something like that.
Tomas
From | Date | Subject | |
---|---|---|---|
Next Message | Simon Riggs | 2013-02-04 21:06:50 | Re: split rm_name and rm_desc out of rmgr.c |
Previous Message | Alvaro Herrera | 2013-02-04 20:57:05 | split rm_name and rm_desc out of rmgr.c |