Remove separate files for the initial contents of pg_(sh)description

This data was only in separate files because it was the most convenient
way to handle it with a shell script. Now that we use a general-purpose
programming language, it's easy to assemble the data into the same format
as the rest of the catalogs and output it into postgres.bki. This allows
removal of some special-purpose code from initdb.c.

Discussion: https://www.postgresql.org/message-id/CACPNZCtVFtjHre6hg9dput0qRPp39pzuyA2A6BT8wdgrRy%2BQdA%40mail.gmail.com
Author: John Naylor
This commit is contained in:
Heikki Linnakangas 2020-01-19 13:54:58 +02:00
parent e0ed6817c0
commit 7aaefadaac
5 changed files with 31 additions and 90 deletions

View File

@ -1,6 +1,4 @@
/postgres.bki /postgres.bki
/postgres.description
/postgres.shdescription
/schemapg.h /schemapg.h
/pg_*_d.h /pg_*_d.h
/bki-stamp /bki-stamp

View File

@ -44,8 +44,6 @@ OBJS = \
storage.o \ storage.o \
toasting.o toasting.o
BKIFILES = postgres.bki postgres.description postgres.shdescription
include $(top_srcdir)/src/backend/common.mk include $(top_srcdir)/src/backend/common.mk
# Note: the order of this list determines the order in which the catalog # Note: the order of this list determines the order in which the catalog
@ -127,8 +125,6 @@ $(top_builddir)/src/include/catalog/header-stamp: bki-stamp
.PHONY: install-data .PHONY: install-data
install-data: bki-stamp installdirs install-data: bki-stamp installdirs
$(INSTALL_DATA) $(call vpathsearch,postgres.bki) '$(DESTDIR)$(datadir)/postgres.bki' $(INSTALL_DATA) $(call vpathsearch,postgres.bki) '$(DESTDIR)$(datadir)/postgres.bki'
$(INSTALL_DATA) $(call vpathsearch,postgres.description) '$(DESTDIR)$(datadir)/postgres.description'
$(INSTALL_DATA) $(call vpathsearch,postgres.shdescription) '$(DESTDIR)$(datadir)/postgres.shdescription'
$(INSTALL_DATA) $(srcdir)/system_views.sql '$(DESTDIR)$(datadir)/system_views.sql' $(INSTALL_DATA) $(srcdir)/system_views.sql '$(DESTDIR)$(datadir)/system_views.sql'
$(INSTALL_DATA) $(srcdir)/information_schema.sql '$(DESTDIR)$(datadir)/information_schema.sql' $(INSTALL_DATA) $(srcdir)/information_schema.sql '$(DESTDIR)$(datadir)/information_schema.sql'
$(INSTALL_DATA) $(srcdir)/sql_features.txt '$(DESTDIR)$(datadir)/sql_features.txt' $(INSTALL_DATA) $(srcdir)/sql_features.txt '$(DESTDIR)$(datadir)/sql_features.txt'
@ -138,12 +134,11 @@ installdirs:
.PHONY: uninstall-data .PHONY: uninstall-data
uninstall-data: uninstall-data:
rm -f $(addprefix '$(DESTDIR)$(datadir)'/, $(BKIFILES) system_views.sql information_schema.sql sql_features.txt) rm -f $(addprefix '$(DESTDIR)$(datadir)'/, postgres.bki system_views.sql information_schema.sql sql_features.txt)
# postgres.bki, postgres.description, postgres.shdescription, # postgres.bki and the generated headers are in the distribution tarball,
# and the generated headers are in the distribution tarball,
# so they are not cleaned here. # so they are not cleaned here.
clean: clean:
maintainer-clean: clean maintainer-clean: clean
rm -f bki-stamp $(BKIFILES) $(GENERATED_HEADERS) rm -f bki-stamp postgres.bki $(GENERATED_HEADERS)

View File

@ -2,10 +2,9 @@
#---------------------------------------------------------------------- #----------------------------------------------------------------------
# #
# genbki.pl # genbki.pl
# Perl script that generates postgres.bki, postgres.description, # Perl script that generates postgres.bki and symbol definition
# postgres.shdescription, and symbol definition headers from specially # headers from specially formatted header files and data files.
# formatted header files and data files. The BKI files are used to # postgres.bki is used to initialize the postgres template database.
# initialize the postgres template database.
# #
# Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group # Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
# Portions Copyright (c) 1994, Regents of the University of California # Portions Copyright (c) 1994, Regents of the University of California
@ -93,9 +92,29 @@ foreach my $header (@ARGV)
my $data = Catalog::ParseData($datfile, $schema, 0); my $data = Catalog::ParseData($datfile, $schema, 0);
$catalog_data{$catname} = $data; $catalog_data{$catname} = $data;
# Check for duplicated OIDs while we're at it.
foreach my $row (@$data) foreach my $row (@$data)
{ {
# Generate entries for pg_description and pg_shdescription.
if (defined $row->{descr})
{
my %descr = (
objoid => $row->{oid},
classoid => $catalog->{relation_oid},
objsubid => 0,
description => $row->{descr});
if ($catalog->{shared_relation})
{
delete $descr{objsubid};
push @{ $catalog_data{pg_shdescription} }, \%descr;
}
else
{
push @{ $catalog_data{pg_description}}, \%descr;
}
}
# Check for duplicated OIDs while we're at it.
$oidcounts{ $row->{oid} }++ if defined $row->{oid}; $oidcounts{ $row->{oid} }++ if defined $row->{oid};
} }
} }
@ -361,15 +380,8 @@ open my $bki, '>', $bkifile . $tmpext
my $schemafile = $output_path . 'schemapg.h'; my $schemafile = $output_path . 'schemapg.h';
open my $schemapg, '>', $schemafile . $tmpext open my $schemapg, '>', $schemafile . $tmpext
or die "can't open $schemafile$tmpext: $!"; or die "can't open $schemafile$tmpext: $!";
my $descrfile = $output_path . 'postgres.description';
open my $descr, '>', $descrfile . $tmpext
or die "can't open $descrfile$tmpext: $!";
my $shdescrfile = $output_path . 'postgres.shdescription';
open my $shdescr, '>', $shdescrfile . $tmpext
or die "can't open $shdescrfile$tmpext: $!";
# Generate postgres.bki, postgres.description, postgres.shdescription, # Generate postgres.bki and pg_*_d.h headers.
# and pg_*_d.h headers.
# version marker for .bki file # version marker for .bki file
print $bki "# PostgreSQL $major_version\n"; print $bki "# PostgreSQL $major_version\n";
@ -579,22 +591,6 @@ EOM
# Write to postgres.bki # Write to postgres.bki
print_bki_insert(\%bki_values, $schema); print_bki_insert(\%bki_values, $schema);
# Write comments to postgres.description and
# postgres.shdescription
if (defined $bki_values{descr})
{
if ($catalog->{shared_relation})
{
printf $shdescr "%s\t%s\t%s\n",
$bki_values{oid}, $catname, $bki_values{descr};
}
else
{
printf $descr "%s\t%s\t0\t%s\n",
$bki_values{oid}, $catname, $bki_values{descr};
}
}
# Emit OID symbol # Emit OID symbol
if (defined $bki_values{oid_symbol}) if (defined $bki_values{oid_symbol})
{ {
@ -673,14 +669,10 @@ print $schemapg "\n#endif\t\t\t\t\t\t\t/* SCHEMAPG_H */\n";
# We're done emitting data # We're done emitting data
close $bki; close $bki;
close $schemapg; close $schemapg;
close $descr;
close $shdescr;
# Finally, rename the completed files into place. # Finally, rename the completed files into place.
Catalog::RenameTempFile($bkifile, $tmpext); Catalog::RenameTempFile($bkifile, $tmpext);
Catalog::RenameTempFile($schemafile, $tmpext); Catalog::RenameTempFile($schemafile, $tmpext);
Catalog::RenameTempFile($descrfile, $tmpext);
Catalog::RenameTempFile($shdescrfile, $tmpext);
exit 0; exit 0;
@ -967,9 +959,9 @@ Options:
--set-version PostgreSQL version number for initdb cross-check --set-version PostgreSQL version number for initdb cross-check
--include-path Include path in source tree --include-path Include path in source tree
genbki.pl generates BKI files and symbol definition genbki.pl generates postgres.bki and symbol definition
headers from specially formatted header files and .dat headers from specially formatted header files and .dat
files. The BKI files are used to initialize the files. postgres.bki is used to initialize the
postgres template database. postgres template database.
Report bugs to <pgsql-bugs\@lists.postgresql.org>. Report bugs to <pgsql-bugs\@lists.postgresql.org>.

View File

@ -151,8 +151,6 @@ static int wal_segment_size_mb;
static const char *progname; static const char *progname;
static int encodingid; static int encodingid;
static char *bki_file; static char *bki_file;
static char *desc_file;
static char *shdesc_file;
static char *hba_file; static char *hba_file;
static char *ident_file; static char *ident_file;
static char *conf_file; static char *conf_file;
@ -1644,38 +1642,11 @@ setup_sysviews(FILE *cmdfd)
} }
/* /*
* load description data * fill in extra description data
*/ */
static void static void
setup_description(FILE *cmdfd) setup_description(FILE *cmdfd)
{ {
PG_CMD_PUTS("CREATE TEMP TABLE tmp_pg_description ( "
" objoid oid, "
" classname name, "
" objsubid int4, "
" description text);\n\n");
PG_CMD_PRINTF("COPY tmp_pg_description FROM E'%s';\n\n",
escape_quotes(desc_file));
PG_CMD_PUTS("INSERT INTO pg_description "
" SELECT t.objoid, c.oid, t.objsubid, t.description "
" FROM tmp_pg_description t, pg_class c "
" WHERE c.relname = t.classname;\n\n");
PG_CMD_PUTS("CREATE TEMP TABLE tmp_pg_shdescription ( "
" objoid oid, "
" classname name, "
" description text);\n\n");
PG_CMD_PRINTF("COPY tmp_pg_shdescription FROM E'%s';\n\n",
escape_quotes(shdesc_file));
PG_CMD_PUTS("INSERT INTO pg_shdescription "
" SELECT t.objoid, c.oid, t.description "
" FROM tmp_pg_shdescription t, pg_class c "
" WHERE c.relname = t.classname;\n\n");
/* Create default descriptions for operator implementation functions */ /* Create default descriptions for operator implementation functions */
PG_CMD_PUTS("WITH funcdescs AS ( " PG_CMD_PUTS("WITH funcdescs AS ( "
"SELECT p.oid as p_oid, o.oid as o_oid, oprname " "SELECT p.oid as p_oid, o.oid as o_oid, oprname "
@ -1689,13 +1660,6 @@ setup_description(FILE *cmdfd)
" AND NOT EXISTS (SELECT 1 FROM pg_description " " AND NOT EXISTS (SELECT 1 FROM pg_description "
" WHERE objoid = o_oid AND classoid = 'pg_operator'::regclass" " WHERE objoid = o_oid AND classoid = 'pg_operator'::regclass"
" AND description LIKE 'deprecated%');\n\n"); " AND description LIKE 'deprecated%');\n\n");
/*
* Even though the tables are temp, drop them explicitly so they don't get
* copied into template0/postgres databases.
*/
PG_CMD_PUTS("DROP TABLE tmp_pg_description;\n\n");
PG_CMD_PUTS("DROP TABLE tmp_pg_shdescription;\n\n");
} }
/* /*
@ -2586,8 +2550,6 @@ void
setup_data_file_paths(void) setup_data_file_paths(void)
{ {
set_input(&bki_file, "postgres.bki"); set_input(&bki_file, "postgres.bki");
set_input(&desc_file, "postgres.description");
set_input(&shdesc_file, "postgres.shdescription");
set_input(&hba_file, "pg_hba.conf.sample"); set_input(&hba_file, "pg_hba.conf.sample");
set_input(&ident_file, "pg_ident.conf.sample"); set_input(&ident_file, "pg_ident.conf.sample");
set_input(&conf_file, "postgresql.conf.sample"); set_input(&conf_file, "postgresql.conf.sample");
@ -2602,13 +2564,11 @@ setup_data_file_paths(void)
"VERSION=%s\n" "VERSION=%s\n"
"PGDATA=%s\nshare_path=%s\nPGPATH=%s\n" "PGDATA=%s\nshare_path=%s\nPGPATH=%s\n"
"POSTGRES_SUPERUSERNAME=%s\nPOSTGRES_BKI=%s\n" "POSTGRES_SUPERUSERNAME=%s\nPOSTGRES_BKI=%s\n"
"POSTGRES_DESCR=%s\nPOSTGRES_SHDESCR=%s\n"
"POSTGRESQL_CONF_SAMPLE=%s\n" "POSTGRESQL_CONF_SAMPLE=%s\n"
"PG_HBA_SAMPLE=%s\nPG_IDENT_SAMPLE=%s\n", "PG_HBA_SAMPLE=%s\nPG_IDENT_SAMPLE=%s\n",
PG_VERSION, PG_VERSION,
pg_data, share_path, bin_path, pg_data, share_path, bin_path,
username, bki_file, username, bki_file,
desc_file, shdesc_file,
conf_file, conf_file,
hba_file, ident_file); hba_file, ident_file);
if (show_setting) if (show_setting)
@ -2616,8 +2576,6 @@ setup_data_file_paths(void)
} }
check_input(bki_file); check_input(bki_file);
check_input(desc_file);
check_input(shdesc_file);
check_input(hba_file); check_input(hba_file);
check_input(ident_file); check_input(ident_file);
check_input(conf_file); check_input(conf_file);

View File

@ -71,8 +71,6 @@ if %DIST%==1 if exist src\interfaces\ecpg\preproc\c_kwlist_d.h del /q src\interf
if %DIST%==1 if exist src\interfaces\ecpg\preproc\ecpg_kwlist_d.h del /q src\interfaces\ecpg\preproc\ecpg_kwlist_d.h if %DIST%==1 if exist src\interfaces\ecpg\preproc\ecpg_kwlist_d.h del /q src\interfaces\ecpg\preproc\ecpg_kwlist_d.h
if %DIST%==1 if exist src\interfaces\ecpg\preproc\preproc.y del /q src\interfaces\ecpg\preproc\preproc.y if %DIST%==1 if exist src\interfaces\ecpg\preproc\preproc.y del /q src\interfaces\ecpg\preproc\preproc.y
if %DIST%==1 if exist src\backend\catalog\postgres.bki del /q src\backend\catalog\postgres.bki if %DIST%==1 if exist src\backend\catalog\postgres.bki del /q src\backend\catalog\postgres.bki
if %DIST%==1 if exist src\backend\catalog\postgres.description del /q src\backend\catalog\postgres.description
if %DIST%==1 if exist src\backend\catalog\postgres.shdescription del /q src\backend\catalog\postgres.shdescription
if %DIST%==1 if exist src\backend\catalog\schemapg.h del /q src\backend\catalog\schemapg.h if %DIST%==1 if exist src\backend\catalog\schemapg.h del /q src\backend\catalog\schemapg.h
if %DIST%==1 if exist src\backend\catalog\pg_*_d.h del /q src\backend\catalog\pg_*_d.h if %DIST%==1 if exist src\backend\catalog\pg_*_d.h del /q src\backend\catalog\pg_*_d.h
if %DIST%==1 if exist src\backend\catalog\bki-stamp del /q src\backend\catalog\bki-stamp if %DIST%==1 if exist src\backend\catalog\bki-stamp del /q src\backend\catalog\bki-stamp