BUG: PostgreSQL 19devel throws internal opfamily error for FK with reordered referenced columns

Fredrik Widlert <fredrik.widlert@digpro.se>

From: Fredrik Widlert <fredrik.widlert@digpro.se>
To: pgsql-bugs@lists.postgresql.org
Date: 2026-04-09T15:27:19Z
Lists: pgsql-bugs
Hello,

I believe I may have found a regression in PostgreSQL 19devel, downloaded
on 2026-04-09
from https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.gz.

postgres=# select version();
                                               version
-----------------------------------------------------------------------------------------------------
 PostgreSQL 19devel on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu
13.2.0-23ubuntu4) 13.2.0, 64-bit


With the reproducer below, PostgreSQL 18 reports a normal foreign-key
violation
at INSERT time, but PostgreSQL 19devel instead throws an internal-looking
error:

ERROR:  operator 98 is not a member of opfamily 1976



-- reproducer:
drop table if exists parent, child;

create table parent (
    app_id      varchar(256) not null,
    report_id   smallint     not null,
    otype       integer      not null,
    subtype     integer      not null,
    ctype       integer      not null,
    column_name varchar(30)  not null,
    primary key (app_id, report_id, otype, subtype, ctype, column_name)
);

create table child (
    app_id      varchar(256) not null,
    report_id   smallint     not null,
    otype       integer      not null,
    subtype     integer      not null,
    column_name varchar(30)  not null,
    ctype       integer,
    -- intentionally swapped: column_name, ctype
    constraint child_fk
      foreign key (app_id, report_id, otype, subtype, column_name, ctype)
      references parent (app_id, report_id, otype, subtype, column_name,
ctype)
);


-- trigger the problem
insert into child (app_id, report_id, otype, subtype, column_name, ctype)
values ('DEFAULT_APP', 0, -1, -1, 'ID', -1);


/Fredrik Widlert
fredrik.widlert@digpro.se

Commits

  1. Add test case for same-type reordered FK columns

  2. Assert index_attnos[0] == 1 in ri_FastPathFlushArray()

  3. Fix FK fast-path scan key ordering for mismatched column order

  4. Add fast path for foreign key constraint checks