Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ERROR: relation "nlx_bag_info" does not exist wanneer schema niet in het search path staat #341

Closed
fsteggink opened this issue Jan 10, 2022 · 6 comments
Assignees
Labels
Milestone

Comments

@fsteggink
Copy link
Member

Als je een van de _actueel of _actueelbestaand views probeert te benaderen, waarbij je search_path niet is ingesteld (dus op public) staat of op iets anders waarbij het BAG v2-schema niet in het search_path staat, dan krijg je de volgende foutmelding:

db=> select bagv2.extract_datum();
ERROR:  relation "nlx_bag_info" does not exist
LINE 3:                      FROM nlx_bag_info
                                  ^
QUERY:
                   SELECT waarde::timestamp
                     FROM nlx_bag_info
                    WHERE sleutel = 'extract_datum'

CONTEXT:  SQL function "extract_datum" during inlining

Zodra je het BAG v2-schema aan het search_path toevoegt, werkt deze functie wel en daarmee ook de _actueel en _actueelbestaand views.

Is het niet robuuster om ipv deze functie een with-statement te gebruiken in de views? Of een view die de extract_datum ophaalt?

Vb:

CREATE VIEW lp2 AS
    WITH extract_datum as (
       SELECT waarde::timestamp
         FROM nlx_bag_info
        WHERE sleutel = 'extract_datum'
    )    
    SELECT * FROM ligplaats
    JOIN extract_datum ON 1=1
    WHERE
        beginDatumTijdvakGeldigheid <= extract_datum.waarde
        AND (eindDatumTijdvakGeldigheid is NULL OR eindDatumTijdvakGeldigheid >= extract_datum.waarde)
        AND aanduidingrecordinactief is FALSE
        AND ligplaatsStatus <> 'Plaats ingetrokken'::ligplaatsStatus;

db=> set search_path=public;
SET
db=> select count(*) from bagv2.lp2;
 count
-------
 12377
(1 row)

db=> select count(*) from bagv2.ligplaatsactueelbestaand;
ERROR:  relation "nlx_bag_info" does not exist
LINE 3:                      FROM nlx_bag_info
                                  ^
QUERY:
                   SELECT waarde::timestamp
                     FROM nlx_bag_info
                    WHERE sleutel = 'extract_datum'

CONTEXT:  SQL function "extract_datum" during inlining

Evt. timestamp with time zone gebruiken zoals voorgesteld in issue #340.

@fsteggink
Copy link
Member Author

fsteggink commented Jan 10, 2022

Mijn view lp2 is niet helemaal zoals het zou moeten. Het veld waarde komt in deze definitie ook terecht in de kolommen. Dat is natuurlijk niet de bedoeling. Dat is makkelijk te fixen door ligplaats.* te bevragen.

@fsteggink
Copy link
Member Author

Gelijk maar een fix doorgevoerd, omdat ik er nu last van heb. V.w.b. performance zal dit waarschijnlijk niet beter of slechter zijn dan een functie. In onderstaand execution plan is te zien dat nlx_bag_info maar 1x wordt doorgelopen.

Query plan:

 Nested Loop  (cost=0.00..1306.94 rows=4912 width=396)
   Join Filter: ((lig.begindatumtijdvakgeldigheid <= (nlx_bag_info.waarde)::timestamp without time zone) AND ((lig.einddatumtijdvakgeldigheid IS NULL) OR (lig.einddatumtijdvakgeldigheid >= (nlx_bag_info.waarde)::timestamp without time zone)))
   ->  Seq Scan on nlx_bag_info  (cost=0.00..1.11 rows=1 width=32)
         Filter: ((sleutel)::text = 'extract_datum'::text)
   ->  Seq Scan on ligplaats lig  (cost=0.00..867.38 rows=17538 width=396)
         Filter: (aanduidingrecordinactief IS FALSE)
(6 rows)

@fsteggink
Copy link
Member Author

De index op sleutel in nlx_bag_info wordt niet aangeroepen Ook niet als ik de tekst 'extract_datum' cast naar varchar. Waarschijnlijk omdat er slechts 9 rijen in de tabel zitten.

@justb4
Copy link
Contributor

justb4 commented Jan 13, 2022

Inderdaad gereproduceerd, in standaard schema bagactueel werkt de query hieronder al niet:

image

@justb4 justb4 added this to the Versie 1.5.4 milestone Jan 13, 2022
@sebastic
Copy link
Contributor

Gebruik van het public schema wordt niet ondersteunt (#316), gebruikers moeten daarom het search_path configuren, e.g.:

ALTER ROLE <username>
IN DATABASE <database>
SET search_path TO <schema>, public; 

@justb4 justb4 closed this as completed in 8374c3d Jan 14, 2022
justb4 added a commit that referenced this issue Jan 14, 2022
Maak Extract_datum een VIEW vanwege #341.
@fsteggink
Copy link
Member Author

Gebruik van het public schema wordt niet ondersteunt (#316), gebruikers moeten daarom het search_path configuren, e.g.:

ALTER ROLE <username>
IN DATABASE <database>
SET search_path TO <schema>, public; 

Dat maakt het gebruik van de NLExtract database een stuk minder portable. Bij gebruik van een view heb je dat probleem niet.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants