Обсуждение: pgsql: Generate syscache info from catalog files
Generate syscache info from catalog files Add a new genbki macros MAKE_SYSCACHE that specifies the syscache ID macro, the underlying index, and the number of buckets. From that, we can generate the existing tables in syscache.h and syscache.c via genbki.pl. Reviewed-by: John Naylor <johncnaylorls@gmail.com> Discussion: https://www.postgresql.org/message-id/flat/75ae5875-3abc-dafc-8aec-73247ed41cde@eisentraut.org Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/9b1a6f50b91dca6610932650c8c81a3c924259f9 Modified Files -------------- src/backend/catalog/.gitignore | 2 + src/backend/catalog/Catalog.pm | 10 + src/backend/catalog/Makefile | 2 +- src/backend/catalog/genbki.pl | 75 +++ src/backend/utils/cache/syscache.c | 632 +------------------------ src/include/catalog/.gitignore | 2 + src/include/catalog/genbki.h | 6 + src/include/catalog/meson.build | 18 +- src/include/catalog/pg_aggregate.h | 2 + src/include/catalog/pg_am.h | 3 + src/include/catalog/pg_amop.h | 3 + src/include/catalog/pg_amproc.h | 2 + src/include/catalog/pg_attribute.h | 3 + src/include/catalog/pg_auth_members.h | 3 + src/include/catalog/pg_authid.h | 3 + src/include/catalog/pg_cast.h | 2 + src/include/catalog/pg_class.h | 3 + src/include/catalog/pg_collation.h | 3 + src/include/catalog/pg_constraint.h | 2 + src/include/catalog/pg_conversion.h | 4 + src/include/catalog/pg_database.h | 2 + src/include/catalog/pg_default_acl.h | 2 + src/include/catalog/pg_enum.h | 3 + src/include/catalog/pg_event_trigger.h | 3 + src/include/catalog/pg_foreign_data_wrapper.h | 3 + src/include/catalog/pg_foreign_server.h | 3 + src/include/catalog/pg_foreign_table.h | 2 + src/include/catalog/pg_index.h | 2 + src/include/catalog/pg_language.h | 3 + src/include/catalog/pg_namespace.h | 3 + src/include/catalog/pg_opclass.h | 3 + src/include/catalog/pg_operator.h | 2 + src/include/catalog/pg_opfamily.h | 3 + src/include/catalog/pg_parameter_acl.h | 2 + src/include/catalog/pg_partitioned_table.h | 2 + src/include/catalog/pg_proc.h | 3 + src/include/catalog/pg_publication.h | 3 + src/include/catalog/pg_publication_namespace.h | 3 + src/include/catalog/pg_publication_rel.h | 3 + src/include/catalog/pg_range.h | 3 + src/include/catalog/pg_replication_origin.h | 3 + src/include/catalog/pg_rewrite.h | 2 + src/include/catalog/pg_sequence.h | 2 + src/include/catalog/pg_statistic.h | 2 + src/include/catalog/pg_statistic_ext.h | 3 + src/include/catalog/pg_statistic_ext_data.h | 1 + src/include/catalog/pg_subscription.h | 3 + src/include/catalog/pg_subscription_rel.h | 2 + src/include/catalog/pg_tablespace.h | 2 + src/include/catalog/pg_transform.h | 3 + src/include/catalog/pg_ts_config.h | 3 + src/include/catalog/pg_ts_config_map.h | 2 + src/include/catalog/pg_ts_dict.h | 3 + src/include/catalog/pg_ts_parser.h | 3 + src/include/catalog/pg_ts_template.h | 3 + src/include/catalog/pg_type.h | 3 + src/include/catalog/pg_user_mapping.h | 3 + src/include/utils/syscache.h | 98 +--- src/tools/pginclude/cpluspluscheck | 5 + src/tools/pginclude/headerscheck | 5 + 60 files changed, 267 insertions(+), 717 deletions(-)
Peter Eisentraut <peter@eisentraut.org> writes:
> Generate syscache info from catalog files
Per guaibasaurus[1], this commit broke "make dist":
...
rm -rf tmp_install/ portlock/
rm -f config.cache config.log config.status GNUmakefile
make[1]: Leaving directory '/home/pgsql/buildfarm/buildroot/HEAD/pgsql.build/postgresql-17devel'
/bin/tar chf postgresql-17devel.tar postgresql-17devel
/bin/tar: postgresql-17devel/src/include/catalog/syscache_ids.h: File removed before we read it
/bin/tar: postgresql-17devel/src/include/catalog/syscache_info.h: File removed before we read it
make: *** [GNUmakefile:94: postgresql-17devel.tar] Error 1
make: *** Deleting file 'postgresql-17devel.tar'
I'm not sure why --- the makefile changes treat these new files
exactly like other generated files. It doesn't repro here,
either, which is odd. It looks like a timing problem, but how
could there be one?
regards, tom lane
[1] https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=guaibasaurus&dt=2024-01-23%2012%3A20%3A03
I wrote:
> Peter Eisentraut <peter@eisentraut.org> writes:
>> Generate syscache info from catalog files
> Per guaibasaurus[1], this commit broke "make dist":
> ...
> I'm not sure why --- the makefile changes treat these new files
> exactly like other generated files. It doesn't repro here,
> either, which is odd. It looks like a timing problem, but how
> could there be one?
Even odder: I did a test tarball build, and that worked too.
That runs on the very same VM as guaibasaurus, so what the heck?
regards, tom lane
On 23.01.24 15:08, Tom Lane wrote: > Peter Eisentraut <peter@eisentraut.org> writes: >> Generate syscache info from catalog files > > Per guaibasaurus[1], this commit broke "make dist": > > ... > rm -rf tmp_install/ portlock/ > rm -f config.cache config.log config.status GNUmakefile > make[1]: Leaving directory '/home/pgsql/buildfarm/buildroot/HEAD/pgsql.build/postgresql-17devel' > /bin/tar chf postgresql-17devel.tar postgresql-17devel > /bin/tar: postgresql-17devel/src/include/catalog/syscache_ids.h: File removed before we read it > /bin/tar: postgresql-17devel/src/include/catalog/syscache_info.h: File removed before we read it > make: *** [GNUmakefile:94: postgresql-17devel.tar] Error 1 > make: *** Deleting file 'postgresql-17devel.tar' > > I'm not sure why --- the makefile changes treat these new files > exactly like other generated files. It doesn't repro here, > either, which is odd. It looks like a timing problem, but how > could there be one? I have found that the files are not listed in the clean target in src/include/Makefile. That might explain it, but it's gotta be fixed anyway. I'll go ahead with that.
Peter Eisentraut <peter@eisentraut.org> writes:
> On 23.01.24 15:08, Tom Lane wrote:
>> Per guaibasaurus[1], this commit broke "make dist":
>> I'm not sure why --- the makefile changes treat these new files
>> exactly like other generated files. It doesn't repro here,
>> either, which is odd. It looks like a timing problem, but how
>> could there be one?
> I have found that the files are not listed in the clean target in
> src/include/Makefile. That might explain it, but it's gotta be fixed
> anyway. I'll go ahead with that.
Looks like that made guaibasaurus happy, but I'm still mystified
as to what was wrong and why it didn't repro elsewhere.
regards, tom lane
Hi,
> > I have found that the files are not listed in the clean target in
> > src/include/Makefile. That might explain it, but it's gotta be fixed
> > anyway. I'll go ahead with that.
>
> Looks like that made guaibasaurus happy, but I'm still mystified
> as to what was wrong and why it didn't repro elsewhere.
I noticed that catalog/syscache_ids.h is not installed when using
Meson. This breaks 3rd party extensions like this:
```
In file included from
/Users/eax/projects/c/timescaledb/tsl/test/src/compression_unit_test.c:19:
/Users/eax/pginstall/include/postgresql/server/utils/syscache.h:23:10:
fatal error: 'catalog/syscache_ids.h' file not found
#include "catalog/syscache_ids.h"
^~~~~~~~~~~~~~~~~~~~~~~~
```
It seems to me that include/catalog/meson.build should be modified,
however syscache_info.h *is* installed and I don't see why it would be
processed differently from syscache_ids.h.
There is no such problem with Autotools, it looks like 6eb6086faa38
did the trick.
--
Best regards,
Aleksander Alekseev
On 05.02.24 13:48, Aleksander Alekseev wrote: > Hi, > >>> I have found that the files are not listed in the clean target in >>> src/include/Makefile. That might explain it, but it's gotta be fixed >>> anyway. I'll go ahead with that. >> >> Looks like that made guaibasaurus happy, but I'm still mystified >> as to what was wrong and why it didn't repro elsewhere. > > I noticed that catalog/syscache_ids.h is not installed when using > Meson. This breaks 3rd party extensions like this: > > ``` > In file included from > /Users/eax/projects/c/timescaledb/tsl/test/src/compression_unit_test.c:19: > /Users/eax/pginstall/include/postgresql/server/utils/syscache.h:23:10: > fatal error: 'catalog/syscache_ids.h' file not found > #include "catalog/syscache_ids.h" > ^~~~~~~~~~~~~~~~~~~~~~~~ > ``` > > It seems to me that include/catalog/meson.build should be modified, > however syscache_info.h *is* installed and I don't see why it would be > processed differently from syscache_ids.h. The code had this backward accidentally: syscache_ids.h should be installed, but syscache_info.h not. I have fixed this. Thanks.