BUG #15040: "could not open relation" error

From: PG Bug reporting form <noreply(at)postgresql(dot)org>
To: pgsql-bugs(at)lists(dot)postgresql(dot)org
Cc: alkonstantinov(at)outlook(dot)com
Subject: BUG #15040: "could not open relation" error
Date: 2018-01-31 16:23:38
Message-ID: 151741581876.1235.1543133136433276338@wrigleys.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

The following bug has been logged on the website:

Bug reference: 15040
Logged by: Alexander Konstantinov
Email address: alkonstantinov(at)outlook(dot)com
PostgreSQL version: 10.0
Operating system: Ubuntu
Description:

The following script represents a function, which calls plperlu-function.
This function populates temp table lucy.f_search_full_idx. In the bottom of
the function you can find "raise notice '%', 'passes here';"
The weird thing is that when I execute the function the notice ("passes
here") is raised and yet I got error "could not open relation with OID
935605" which is totally illogical.

Any help and ideas are highly appreciated

CREATE OR REPLACE FUNCTION fts.f_search_full_idx(_search_txt varchar,
_fti_filters jsonb, _sort_spec jsonb, _dt_from date, _dt_to date, _keys
jsonb, _offset integer, _count integer)
RETURNS TABLE (ord integer, doc_id integer, score decimal, titles jsonb,
excerpt jsonb, org_id integer, count integer, langs jsonb, doctype
varchar,
convention_count integer, case_count integer, thematics
jsonb, from_dt date, to_dt date, dtad_from date, dtad_to date, dtterm_from
date, dtterm_to date,
dtif_from date, dtif_to date)
AS $$
-- _sort_spec е JSON масив: с елементи {"field" => fieldname, "reverse" =>
boolean}
-- ако _sort_spec е NULL, подредбата е по релевантност
DECLARE
_jdt date;
_fti_fields varchar;
_dates varchar;
_range_dates varchar = NULL;
_adt_from date;
_adt_to date;
BEGIN
SELECT INTO _dates string_agg(to_char(rec_date, 'YYYYMMDD'), ' ') FROM
fts.f_get_dates_from_str(' ' || _search_txt || ' ');
SELECT INTO _search_txt _search_txt || COALESCE(' ' || _dates, '');
SELECT INTO _fti_fields lucy.f_fti_fields(_fti_filters)::varchar;
--
IF _dt_from IS NOT NULL THEN
SELECT INTO _dt_to COALESCE(_dt_to, now()::date);
-- SELECT INTO _range_dates fts.f_range_dates(_dt_from, _dt_to);
END IF;
--
CREATE TEMPORARY TABLE _t (
id SERIAL NOT NULL PRIMARY KEY,
doc_id integer,
score decimal,
excerpt jsonb,
org_id integer,
cnt integer,
langs varchar,
thematics varchar,
from_dt varchar,
to_dt varchar,
dt varchar,
dtad_from varchar,
dtad_to varchar,
dtterm_from varchar,
dtterm_to varchar,
dtif_from varchar,
dtif_to varchar,
typ varchar);
--
-- SELECT INTO _range_dates NULL;
-- raise notice '%, %, %, %, %, NULL, NULL', _search_txt, _fti_fields,
_sort_spec::varchar, _range_dates, _keys::varchar;
INSERT INTO _t (doc_id, score, excerpt, org_id, cnt, langs, thematics,
from_dt, to_dt, dtad_from, dtad_to, dtterm_from, dtterm_to, dtif_from,
dtif_to, dt, typ)
SELECT f.*, (d.data->'dt')::varchar, t.typ
FROM lucy.f_search_full_idx(_search_txt, _fti_fields, _sort_spec::varchar,
_range_dates, _keys::varchar, NULL/*_offset*/, NULL/*_count*/) f JOIN
rdb.docs d ON f.doc_id = d.id

JOIN
rdb.doc_types t ON d.typ = t.id;
--
IF _keys ? 'adoption_range' THEN
ALTER TABLE _t ADD COLUMN adoption_date date;
SELECT INTO _adt_from, _adt_to (_keys->'adoption_range'->>'from')::date,
(_keys->'adoption_range'->>'to')::date;
WITH upd AS (
SELECT tmp.id, tr.adoption_date
FROM _t tmp JOIN rdb.docs d ON tmp.id = d.id
JOIN rdb.doc_types t ON d.typ = t.id AND t.typ =
'convention'
JOIN treaty tr ON d.org_id = tr.id
)
UPDATE _t t SET adoption_date = upd.adoption_date
FROM upd
WHERE t.id = upd.id;
--
DELETE FROM _t WHERE adoption_date < _adt_from OR adoption_date >
_adt_to;
END IF;
--
IF _keys ? 'inforce_range' THEN
ALTER TABLE _t ADD COLUMN inforce_date date;
SELECT INTO _adt_from, _adt_to (_keys->'inforce_range'->>'from')::date,
(_keys->'inforce_range'->>'to')::date;
WITH upd AS (
SELECT tmp.id, tr.date_entry_into_force
FROM _t tmp JOIN rdb.docs d ON tmp.id = d.id
JOIN rdb.doc_types t ON d.typ = t.id AND t.typ =
'convention'
JOIN treaty tr ON d.org_id = tr.id
)
UPDATE _t t SET inforce_date = upd.date_entry_into_force
FROM upd
WHERE t.id = upd.id;
--
DELETE FROM _t WHERE inforce_date < _adt_from OR inforce_date >
_adt_to;
END IF;
--
IF _keys ? 'termination_range' THEN
ALTER TABLE _t ADD COLUMN date_termination date;
SELECT INTO _adt_from, _adt_to
(_keys->'termination_range'->>'from')::date,
(_keys->'termination_range'->>'to')::date;
WITH upd AS (
SELECT tmp.id, tr.date_termination
FROM _t tmp JOIN rdb.docs d ON tmp.id = d.id
JOIN rdb.doc_types t ON d.typ = t.id AND t.typ =
'convention'
JOIN treaty tr ON d.org_id = tr.id
)
UPDATE _t t SET date_termination = upd.date_termination
FROM upd
WHERE t.id = upd.id;
--
DELETE FROM _t WHERE date_termination < _adt_from OR date_termination >
_adt_to;
END IF;
--
UPDATE _t SET dt = NULL WHERE dt !~ '\d';
--
SELECT INTO _dt_from COALESCE(_dt_from, '1800-01-01'::date);
SELECT INTO _dt_to COALESCE(_dt_to, '2800-01-01'::date);
DELETE FROM _t WHERE dt::date < _dt_from OR dt::date > _dt_to;
SELECT INTO count cnt FROM _t LIMIT 1;
SELECT INTO count COALESCE(count, 0);
--
SELECT INTO convention_count COUNT(*) FROM _t WHERE typ = 'convention';
SELECT INTO case_count COUNT(*) - convention_count FROM _t;
-- raise notice '_offset=%, _count=%', _offset, _count;
--
FOR ord, doc_id, score, _jdt, titles, excerpt, org_id, langs, thematics,
doctype, from_dt, to_dt, dtad_from, dtad_to, dtterm_from, dtterm_to,
dtif_from, dtif_to IN
SELECT t.id, t.doc_id, t.score, t.dt::date, jsonb_agg(d.title),
t.excerpt, t.org_id, t.langs::jsonb, t.thematics::jsonb, d.typ,
t.from_dt::date, t.to_dt::date,
t.dtad_from::date, t.dtad_to::date, t.dtterm_from::date,
t.dtterm_to::date, t.dtif_from::date, t.dtif_to::date
FROM _t t JOIN lucy.vw_docs_txt_mat d ON t.doc_id = d.doc_id
GROUP BY t.id, t.doc_id, t.score, t.dt::date, d.typ
ORDER BY t.id-- DESC
OFFSET _offset LIMIT _count
LOOP
-- CONTINUE WHEN _jdt IS NULL OR _jdt < _dt_from OR _jdt > _dt_to;
RETURN NEXT;
END LOOP;
--
DROP TABLE _t;
raise notice '%', 'passes here';
END;$$language plpgsql;

Browse pgsql-bugs by date

  From Date Subject
Next Message PG Bug reporting form 2018-01-31 19:48:30 BUG #15041: dsa alloc_object null pointer
Previous Message Amit Kapila 2018-01-31 12:44:51 Re: Re: BUG #15039: some question about hash index code