Fix create_graph failing when ag_catalog is not in search_path - #1
Merged
NotHimmel merged 1 commit intoAug 18, 2026
Merged
Conversation
create_index_on_column() passed "graphid_ops" as an unqualified operator
class name, so it was resolved against the caller's search_path. Whenever
ag_catalog was not on the search_path, creating a label failed with
ERROR: operator class "graphid_ops" does not exist for access method "btree"
even for a fully qualified call such as
SELECT ag_catalog.create_graph('g');
The error is misleading: the operator class does exist, it is simply not
visible. This affected create_graph(), create_vlabel(), create_elabel(),
the CSV loader, and label creation from a CREATE or MERGE clause at query
time, since all of them reach create_label().
The unqualified name arrived with the id column indexes in apache#2117, so this
is a regression. Before that commit create_label() built no index and
resolved no name through the search_path. Every other object referenced by
the DDL that create_label() generates is already reached either by OID or
by an ag_catalog qualified name, so qualifying this one restores the
previous behaviour.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Backport of a fix for the 1.7.0 line. Upstream: apache#2505 (PR), apache#2504 (issue).
Problem
With
ag_catalogabsent fromsearch_path, creating a graph fails even for afully schema qualified call:
Same failure for
create_vlabel(),create_elabel(), the CSV loader, and aCREATE/MERGEclause that mentions a label for the first time — the last onefails in the middle of a running query.
GRANT USAGE ON SCHEMA ag_catalogandGRANT EXECUTEdo not help, because the operator class exists and is simplynot visible.
Root cause
create_index_on_column()passed the operator class as an unqualified name, soResolveOpClass()resolved it through the caller'ssearch_path:This was the only unqualified name on that code path. Column types are reached
by OID (
GRAPHIDOID,AGTYPEOID), and_graphid(),agtype_build_map()and_label_id()are already built withlist_make2(makeString("ag_catalog"), ...).The unqualified name arrived with the id column indexes in apache#2117, so
this is a regression against 1.6.0, where
create_label()built no index andresolved no name through
search_path.Testing
PostgreSQL 18.4, built from source:
# All 31 tests passed.Reverting the change and re-running reproduces the error above, so the
one-line change is what fixes it.
Note this does not remove the documented
search_pathrequirement forquerying a graph — some names in the query path are still resolved
unqualified. It only restores
create_graph()to not depending on it.