diff options
| author | Bruce Momjian <bruce@momjian.us> | 2006-02-12 03:22:21 +0000 |
|---|---|---|
| committer | Bruce Momjian <bruce@momjian.us> | 2006-02-12 03:22:21 +0000 |
| commit | f9a726aa883e1690f66bec535d85b34e1f9ed7e7 (patch) | |
| tree | 764d3d849a2614ea5edcd05eaa36496a79f06c87 /src/bin/initdb/initdb.c | |
| parent | 95dbf9c02f9a37fc171e0b94b37f9f903abc3942 (diff) | |
| download | postgresql-f9a726aa883e1690f66bec535d85b34e1f9ed7e7.tar.gz | |
I've created a new shared catalog table pg_shdescription to store
comments on cluster global objects like databases, tablespaces, and
roles.
It touches a lot of places, but not much in the way of big changes. The
only design decision I made was to duplicate the query and manipulation
functions rather than to try and have them handle both shared and local
comments. I believe this is simpler for the code and not an issue for
callers because they know what type of object they are dealing with.
This has resulted in a shobj_description function analagous to
obj_description and backend functions [Create/Delete]SharedComments
mirroring the existing [Create/Delete]Comments functions.
pg_shdescription.h goes into src/include/catalog/
Kris Jurka
Diffstat (limited to 'src/bin/initdb/initdb.c')
| -rw-r--r-- | src/bin/initdb/initdb.c | 51 |
1 files changed, 48 insertions, 3 deletions
diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index 4a85dfb24d..e1c7ad30ce 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -42,7 +42,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * Portions taken from FreeBSD. * - * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.108 2006/02/10 22:05:42 tgl Exp $ + * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.109 2006/02/12 03:22:18 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -105,6 +105,7 @@ static const char *progname; static char *encodingid = "0"; static char *bki_file; static char *desc_file; +static char *shdesc_file; static char *hba_file; static char *ident_file; static char *conf_file; @@ -181,6 +182,7 @@ static void unlimit_systables(void); static void setup_depend(void); static void setup_sysviews(void); static void setup_description(void); +static void setup_shared_description(void); static void setup_conversion(void); static void setup_privileges(void); static void set_info_version(void); @@ -1574,6 +1576,7 @@ unlimit_systables(void) "ALTER TABLE pg_description CREATE TOAST TABLE;\n", "ALTER TABLE pg_proc CREATE TOAST TABLE;\n", "ALTER TABLE pg_rewrite CREATE TOAST TABLE;\n", + "ALTER TABLE pg_shdescription CREATE TOAST TABLE;\n", "ALTER TABLE pg_statistic CREATE TOAST TABLE;\n", NULL }; @@ -1752,6 +1755,42 @@ setup_description(void) } /* + * load shared description data + */ +static void +setup_shared_description(void) +{ + PG_CMD_DECL; + + fputs(_("loading pg_shdescription ... "), stdout); + fflush(stdout); + + snprintf(cmd, sizeof(cmd), + "\"%s\" %s template1 >%s", + backend_exec, backend_options, + DEVNULL); + + PG_CMD_OPEN; + + PG_CMD_PUTS("CREATE TEMP TABLE tmp_pg_shdescription ( " + " objoid oid, " + " classname name, " + " description text) WITHOUT OIDS;\n"); + + PG_CMD_PRINTF1("COPY tmp_pg_shdescription FROM '%s';\n", + 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"); + + PG_CMD_CLOSE; + + check_ok(); +} + +/* * load conversion functions */ static void @@ -2702,6 +2741,7 @@ main(int argc, char *argv[]) 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(&ident_file, "pg_ident.conf.sample"); set_input(&conf_file, "postgresql.conf.sample"); @@ -2718,12 +2758,14 @@ main(int argc, char *argv[]) "VERSION=%s\n" "PGDATA=%s\nshare_path=%s\nPGPATH=%s\n" "POSTGRES_SUPERUSERNAME=%s\nPOSTGRES_BKI=%s\n" - "POSTGRES_DESCR=%s\nPOSTGRESQL_CONF_SAMPLE=%s\n" + "POSTGRES_DESCR=%s\nPOSTGRES_SHDESCR=%s\n" + "POSTGRESQL_CONF_SAMPLE=%s\n" "PG_HBA_SAMPLE=%s\nPG_IDENT_SAMPLE=%s\n", PG_VERSION, pg_data, share_path, bin_path, effective_user, bki_file, - desc_file, conf_file, + desc_file, shdesc_file, + conf_file, hba_file, ident_file); if (show_setting) exit(0); @@ -2731,6 +2773,7 @@ main(int argc, char *argv[]) check_input(bki_file); check_input(desc_file); + check_input(shdesc_file); check_input(hba_file); check_input(ident_file); check_input(conf_file); @@ -2918,6 +2961,8 @@ main(int argc, char *argv[]) setup_description(); + setup_shared_description(); + setup_conversion(); setup_privileges(); |
