mirror of
https://github.com/postgres/postgres.git
synced 2025-05-08 07:21:33 +03:00
Add primary keys and unique constraints to system catalogs
For those system catalogs that have a unique indexes, make a primary key and unique constraint, using ALTER TABLE ... PRIMARY KEY/UNIQUE USING INDEX. This can be helpful for GUI tools that look for a primary key, and it might in the future allow declaring foreign keys, for making schema diagrams. The constraint creation statements are automatically created by genbki.pl from DECLARE_UNIQUE_INDEX directives. To specify which one of the available unique indexes is the primary key, use the new directive DECLARE_UNIQUE_INDEX_PKEY instead. By convention, we usually make a catalog's OID column its primary key, if it has one. Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://www.postgresql.org/message-id/flat/dc5f44d9-5ec1-a596-0251-dadadcdede98@2ndquadrant.com
This commit is contained in:
parent
6533062244
commit
dfb75e478c
1
src/backend/catalog/.gitignore
vendored
1
src/backend/catalog/.gitignore
vendored
@ -1,4 +1,5 @@
|
||||
/postgres.bki
|
||||
/schemapg.h
|
||||
/system_constraints.sql
|
||||
/pg_*_d.h
|
||||
/bki-stamp
|
||||
|
@ -94,14 +94,15 @@ sub ParseHeader
|
||||
push @{ $catalog{toasting} },
|
||||
{ parent_table => $1, toast_oid => $2, toast_index_oid => $3 };
|
||||
}
|
||||
elsif (/^DECLARE_(UNIQUE_)?INDEX\(\s*(\w+),\s*(\d+),\s*(.+)\)/)
|
||||
elsif (/^DECLARE_(UNIQUE_)?INDEX(_PKEY)?\(\s*(\w+),\s*(\d+),\s*(.+)\)/)
|
||||
{
|
||||
push @{ $catalog{indexing} },
|
||||
{
|
||||
is_unique => $1 ? 1 : 0,
|
||||
index_name => $2,
|
||||
index_oid => $3,
|
||||
index_decl => $4
|
||||
is_pkey => $2 ? 1 : 0,
|
||||
index_name => $3,
|
||||
index_oid => $4,
|
||||
index_decl => $5
|
||||
};
|
||||
}
|
||||
elsif (/^CATALOG\((\w+),(\d+),(\w+)\)/)
|
||||
|
@ -121,6 +121,7 @@ $(top_builddir)/src/include/catalog/header-stamp: bki-stamp
|
||||
.PHONY: install-data
|
||||
install-data: bki-stamp installdirs
|
||||
$(INSTALL_DATA) $(call vpathsearch,postgres.bki) '$(DESTDIR)$(datadir)/postgres.bki'
|
||||
$(INSTALL_DATA) $(call vpathsearch,system_constraints.sql) '$(DESTDIR)$(datadir)/system_constraints.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)/sql_features.txt '$(DESTDIR)$(datadir)/sql_features.txt'
|
||||
@ -130,11 +131,11 @@ installdirs:
|
||||
|
||||
.PHONY: uninstall-data
|
||||
uninstall-data:
|
||||
rm -f $(addprefix '$(DESTDIR)$(datadir)'/, postgres.bki system_views.sql information_schema.sql sql_features.txt)
|
||||
rm -f $(addprefix '$(DESTDIR)$(datadir)'/, postgres.bki system_constraints.sql system_views.sql information_schema.sql sql_features.txt)
|
||||
|
||||
# postgres.bki and the generated headers are in the distribution tarball,
|
||||
# so they are not cleaned here.
|
||||
# postgres.bki, system_constraints.sql, and the generated headers are
|
||||
# in the distribution tarball, so they are not cleaned here.
|
||||
clean:
|
||||
|
||||
maintainer-clean: clean
|
||||
rm -f bki-stamp postgres.bki $(GENERATED_HEADERS)
|
||||
rm -f bki-stamp postgres.bki system_constraints.sql $(GENERATED_HEADERS)
|
||||
|
@ -55,6 +55,7 @@ my %catalog_data;
|
||||
my @toast_decls;
|
||||
my @index_decls;
|
||||
my %oidcounts;
|
||||
my @system_constraints;
|
||||
|
||||
foreach my $header (@ARGV)
|
||||
{
|
||||
@ -137,6 +138,17 @@ foreach my $header (@ARGV)
|
||||
$index->{index_name}, $index->{index_oid},
|
||||
$index->{index_decl};
|
||||
$oidcounts{ $index->{index_oid} }++;
|
||||
|
||||
if ($index->{is_unique})
|
||||
{
|
||||
$index->{index_decl} =~ /on (\w+) using/;
|
||||
my $tblname = $1;
|
||||
push @system_constraints,
|
||||
sprintf "ALTER TABLE %s ADD %s USING INDEX %s;",
|
||||
$tblname,
|
||||
$index->{is_pkey} ? "PRIMARY KEY" : "UNIQUE",
|
||||
$index->{index_name};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -388,6 +400,9 @@ open my $bki, '>', $bkifile . $tmpext
|
||||
my $schemafile = $output_path . 'schemapg.h';
|
||||
open my $schemapg, '>', $schemafile . $tmpext
|
||||
or die "can't open $schemafile$tmpext: $!";
|
||||
my $constraints_file = $output_path . 'system_constraints.sql';
|
||||
open my $constraints, '>', $constraints_file . $tmpext
|
||||
or die "can't open $constraints_file$tmpext: $!";
|
||||
|
||||
# Generate postgres.bki and pg_*_d.h headers.
|
||||
|
||||
@ -648,6 +663,12 @@ die
|
||||
"genbki OID counter reached $GenbkiNextOid, overrunning FirstBootstrapObjectId\n"
|
||||
if $GenbkiNextOid > $FirstBootstrapObjectId;
|
||||
|
||||
# Now generate system_constraints.sql
|
||||
|
||||
foreach my $c (@system_constraints)
|
||||
{
|
||||
print $constraints $c, "\n";
|
||||
}
|
||||
|
||||
# Now generate schemapg.h
|
||||
|
||||
@ -688,10 +709,12 @@ print $schemapg "\n#endif\t\t\t\t\t\t\t/* SCHEMAPG_H */\n";
|
||||
# We're done emitting data
|
||||
close $bki;
|
||||
close $schemapg;
|
||||
close $constraints;
|
||||
|
||||
# Finally, rename the completed files into place.
|
||||
Catalog::RenameTempFile($bkifile, $tmpext);
|
||||
Catalog::RenameTempFile($schemafile, $tmpext);
|
||||
Catalog::RenameTempFile($constraints_file, $tmpext);
|
||||
|
||||
exit 0;
|
||||
|
||||
|
@ -159,6 +159,7 @@ static char *conf_file;
|
||||
static char *dictionary_file;
|
||||
static char *info_schema_file;
|
||||
static char *features_file;
|
||||
static char *system_constraints_file;
|
||||
static char *system_views_file;
|
||||
static bool success = false;
|
||||
static bool made_new_pgdata = false;
|
||||
@ -251,10 +252,9 @@ static void bootstrap_template1(void);
|
||||
static void setup_auth(FILE *cmdfd);
|
||||
static void get_su_pwd(void);
|
||||
static void setup_depend(FILE *cmdfd);
|
||||
static void setup_sysviews(FILE *cmdfd);
|
||||
static void setup_run_file(FILE *cmdfd, const char *filename);
|
||||
static void setup_description(FILE *cmdfd);
|
||||
static void setup_collation(FILE *cmdfd);
|
||||
static void setup_dictionary(FILE *cmdfd);
|
||||
static void setup_privileges(FILE *cmdfd);
|
||||
static void set_info_version(void);
|
||||
static void setup_schema(FILE *cmdfd);
|
||||
@ -1600,17 +1600,16 @@ setup_depend(FILE *cmdfd)
|
||||
}
|
||||
|
||||
/*
|
||||
* set up system views
|
||||
* Run external file
|
||||
*/
|
||||
static void
|
||||
setup_sysviews(FILE *cmdfd)
|
||||
setup_run_file(FILE *cmdfd, const char *filename)
|
||||
{
|
||||
char **line;
|
||||
char **sysviews_setup;
|
||||
char **lines;
|
||||
|
||||
sysviews_setup = readfile(system_views_file);
|
||||
lines = readfile(filename);
|
||||
|
||||
for (line = sysviews_setup; *line != NULL; line++)
|
||||
for (char **line = lines; *line != NULL; line++)
|
||||
{
|
||||
PG_CMD_PUTS(*line);
|
||||
free(*line);
|
||||
@ -1618,7 +1617,7 @@ setup_sysviews(FILE *cmdfd)
|
||||
|
||||
PG_CMD_PUTS("\n\n");
|
||||
|
||||
free(sysviews_setup);
|
||||
free(lines);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1661,27 +1660,6 @@ setup_collation(FILE *cmdfd)
|
||||
PG_CMD_PUTS("SELECT pg_import_system_collations('pg_catalog');\n\n");
|
||||
}
|
||||
|
||||
/*
|
||||
* load extra dictionaries (Snowball stemmers)
|
||||
*/
|
||||
static void
|
||||
setup_dictionary(FILE *cmdfd)
|
||||
{
|
||||
char **line;
|
||||
char **conv_lines;
|
||||
|
||||
conv_lines = readfile(dictionary_file);
|
||||
for (line = conv_lines; *line != NULL; line++)
|
||||
{
|
||||
PG_CMD_PUTS(*line);
|
||||
free(*line);
|
||||
}
|
||||
|
||||
PG_CMD_PUTS("\n\n");
|
||||
|
||||
free(conv_lines);
|
||||
}
|
||||
|
||||
/*
|
||||
* Set up privileges
|
||||
*
|
||||
@ -1882,20 +1860,7 @@ set_info_version(void)
|
||||
static void
|
||||
setup_schema(FILE *cmdfd)
|
||||
{
|
||||
char **line;
|
||||
char **lines;
|
||||
|
||||
lines = readfile(info_schema_file);
|
||||
|
||||
for (line = lines; *line != NULL; line++)
|
||||
{
|
||||
PG_CMD_PUTS(*line);
|
||||
free(*line);
|
||||
}
|
||||
|
||||
PG_CMD_PUTS("\n\n");
|
||||
|
||||
free(lines);
|
||||
setup_run_file(cmdfd, info_schema_file);
|
||||
|
||||
PG_CMD_PRINTF("UPDATE information_schema.sql_implementation_info "
|
||||
" SET character_value = '%s' "
|
||||
@ -2534,6 +2499,7 @@ setup_data_file_paths(void)
|
||||
set_input(&dictionary_file, "snowball_create.sql");
|
||||
set_input(&info_schema_file, "information_schema.sql");
|
||||
set_input(&features_file, "sql_features.txt");
|
||||
set_input(&system_constraints_file, "system_constraints.sql");
|
||||
set_input(&system_views_file, "system_views.sql");
|
||||
|
||||
if (show_setting || debug)
|
||||
@ -2895,6 +2861,8 @@ initialize_data_directory(void)
|
||||
|
||||
setup_auth(cmdfd);
|
||||
|
||||
setup_run_file(cmdfd, system_constraints_file);
|
||||
|
||||
setup_depend(cmdfd);
|
||||
|
||||
/*
|
||||
@ -2902,13 +2870,13 @@ initialize_data_directory(void)
|
||||
* They are all droppable at the whim of the DBA.
|
||||
*/
|
||||
|
||||
setup_sysviews(cmdfd);
|
||||
setup_run_file(cmdfd, system_views_file);
|
||||
|
||||
setup_description(cmdfd);
|
||||
|
||||
setup_collation(cmdfd);
|
||||
|
||||
setup_dictionary(cmdfd);
|
||||
setup_run_file(cmdfd, dictionary_file);
|
||||
|
||||
setup_privileges(cmdfd);
|
||||
|
||||
|
@ -55,12 +55,15 @@
|
||||
#define DECLARE_TOAST(name,toastoid,indexoid) extern int no_such_variable
|
||||
|
||||
/*
|
||||
* These lines processed by genbki.pl to create the statements
|
||||
* These lines are processed by genbki.pl to create the statements
|
||||
* the bootstrap parser will turn into DefineIndex calls.
|
||||
*
|
||||
* The keyword is DECLARE_INDEX or DECLARE_UNIQUE_INDEX. The first two
|
||||
* arguments are the index name and OID, the rest is much like a standard
|
||||
* 'create index' SQL command.
|
||||
* The keyword is DECLARE_INDEX or DECLARE_UNIQUE_INDEX or
|
||||
* DECLARE_UNIQUE_INDEX_PKEY. ("PKEY" marks the index as being the catalog's
|
||||
* primary key; currently this is only cosmetically different from a regular
|
||||
* unique index. By convention, we usually make a catalog's OID column its
|
||||
* pkey, if it has one.) The first two arguments are the index's name and
|
||||
* OID, the rest is much like a standard 'create index' SQL command.
|
||||
*
|
||||
* For each index, we also provide a #define for its OID. References to
|
||||
* the index in the C code should always use these #defines, not the actual
|
||||
@ -70,6 +73,7 @@
|
||||
*/
|
||||
#define DECLARE_INDEX(name,oid,decl) extern int no_such_variable
|
||||
#define DECLARE_UNIQUE_INDEX(name,oid,decl) extern int no_such_variable
|
||||
#define DECLARE_UNIQUE_INDEX_PKEY(name,oid,decl) extern int no_such_variable
|
||||
|
||||
/* The following are never defined; they are here only for documentation. */
|
||||
|
||||
|
@ -110,7 +110,7 @@ typedef FormData_pg_aggregate *Form_pg_aggregate;
|
||||
|
||||
DECLARE_TOAST(pg_aggregate, 4159, 4160);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_aggregate_fnoid_index, 2650, on pg_aggregate using btree(aggfnoid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_aggregate_fnoid_index, 2650, on pg_aggregate using btree(aggfnoid oid_ops));
|
||||
#define AggregateFnoidIndexId 2650
|
||||
|
||||
#ifdef EXPOSE_TO_CLIENT_CODE
|
||||
|
@ -49,7 +49,7 @@ typedef FormData_pg_am *Form_pg_am;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_am_name_index, 2651, on pg_am using btree(amname name_ops));
|
||||
#define AmNameIndexId 2651
|
||||
DECLARE_UNIQUE_INDEX(pg_am_oid_index, 2652, on pg_am using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_am_oid_index, 2652, on pg_am using btree(oid oid_ops));
|
||||
#define AmOidIndexId 2652
|
||||
|
||||
#ifdef EXPOSE_TO_CLIENT_CODE
|
||||
|
@ -91,7 +91,7 @@ DECLARE_UNIQUE_INDEX(pg_amop_fam_strat_index, 2653, on pg_amop using btree(amopf
|
||||
#define AccessMethodStrategyIndexId 2653
|
||||
DECLARE_UNIQUE_INDEX(pg_amop_opr_fam_index, 2654, on pg_amop using btree(amopopr oid_ops, amoppurpose char_ops, amopfamily oid_ops));
|
||||
#define AccessMethodOperatorIndexId 2654
|
||||
DECLARE_UNIQUE_INDEX(pg_amop_oid_index, 2756, on pg_amop using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_amop_oid_index, 2756, on pg_amop using btree(oid oid_ops));
|
||||
#define AccessMethodOperatorOidIndexId 2756
|
||||
|
||||
#ifdef EXPOSE_TO_CLIENT_CODE
|
||||
|
@ -69,7 +69,7 @@ typedef FormData_pg_amproc *Form_pg_amproc;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_amproc_fam_proc_index, 2655, on pg_amproc using btree(amprocfamily oid_ops, amproclefttype oid_ops, amprocrighttype oid_ops, amprocnum int2_ops));
|
||||
#define AccessMethodProcedureIndexId 2655
|
||||
DECLARE_UNIQUE_INDEX(pg_amproc_oid_index, 2757, on pg_amproc using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_amproc_oid_index, 2757, on pg_amproc using btree(oid oid_ops));
|
||||
#define AccessMethodProcedureOidIndexId 2757
|
||||
|
||||
#endif /* PG_AMPROC_H */
|
||||
|
@ -50,7 +50,7 @@ DECLARE_TOAST(pg_attrdef, 2830, 2831);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_attrdef_adrelid_adnum_index, 2656, on pg_attrdef using btree(adrelid oid_ops, adnum int2_ops));
|
||||
#define AttrDefaultIndexId 2656
|
||||
DECLARE_UNIQUE_INDEX(pg_attrdef_oid_index, 2657, on pg_attrdef using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_attrdef_oid_index, 2657, on pg_attrdef using btree(oid oid_ops));
|
||||
#define AttrDefaultOidIndexId 2657
|
||||
|
||||
#endif /* PG_ATTRDEF_H */
|
||||
|
@ -194,7 +194,7 @@ typedef FormData_pg_attribute *Form_pg_attribute;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_attribute_relid_attnam_index, 2658, on pg_attribute using btree(attrelid oid_ops, attname name_ops));
|
||||
#define AttributeRelidNameIndexId 2658
|
||||
DECLARE_UNIQUE_INDEX(pg_attribute_relid_attnum_index, 2659, on pg_attribute using btree(attrelid oid_ops, attnum int2_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_attribute_relid_attnum_index, 2659, on pg_attribute using btree(attrelid oid_ops, attnum int2_ops));
|
||||
#define AttributeRelidNumIndexId 2659
|
||||
|
||||
#ifdef EXPOSE_TO_CLIENT_CODE
|
||||
|
@ -42,7 +42,7 @@ CATALOG(pg_auth_members,1261,AuthMemRelationId) BKI_SHARED_RELATION BKI_ROWTYPE_
|
||||
*/
|
||||
typedef FormData_pg_auth_members *Form_pg_auth_members;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_auth_members_role_member_index, 2694, on pg_auth_members using btree(roleid oid_ops, member oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_auth_members_role_member_index, 2694, on pg_auth_members using btree(roleid oid_ops, member oid_ops));
|
||||
#define AuthMemRoleMemIndexId 2694
|
||||
DECLARE_UNIQUE_INDEX(pg_auth_members_member_role_index, 2695, on pg_auth_members using btree(member oid_ops, roleid oid_ops));
|
||||
#define AuthMemMemRoleIndexId 2695
|
||||
|
@ -61,7 +61,7 @@ DECLARE_TOAST(pg_authid, 4175, 4176);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_authid_rolname_index, 2676, on pg_authid using btree(rolname name_ops));
|
||||
#define AuthIdRolnameIndexId 2676
|
||||
DECLARE_UNIQUE_INDEX(pg_authid_oid_index, 2677, on pg_authid using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_authid_oid_index, 2677, on pg_authid using btree(oid oid_ops));
|
||||
#define AuthIdOidIndexId 2677
|
||||
|
||||
#endif /* PG_AUTHID_H */
|
||||
|
@ -56,7 +56,7 @@ CATALOG(pg_cast,2605,CastRelationId)
|
||||
*/
|
||||
typedef FormData_pg_cast *Form_pg_cast;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_cast_oid_index, 2660, on pg_cast using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_cast_oid_index, 2660, on pg_cast using btree(oid oid_ops));
|
||||
#define CastOidIndexId 2660
|
||||
DECLARE_UNIQUE_INDEX(pg_cast_source_target_index, 2661, on pg_cast using btree(castsource oid_ops, casttarget oid_ops));
|
||||
#define CastSourceTargetIndexId 2661
|
||||
|
@ -152,7 +152,7 @@ CATALOG(pg_class,1259,RelationRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(83,Relat
|
||||
*/
|
||||
typedef FormData_pg_class *Form_pg_class;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_class_oid_index, 2662, on pg_class using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_class_oid_index, 2662, on pg_class using btree(oid oid_ops));
|
||||
#define ClassOidIndexId 2662
|
||||
DECLARE_UNIQUE_INDEX(pg_class_relname_nsp_index, 2663, on pg_class using btree(relname name_ops, relnamespace oid_ops));
|
||||
#define ClassNameNspIndexId 2663
|
||||
|
@ -48,7 +48,7 @@ typedef FormData_pg_collation *Form_pg_collation;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_collation_name_enc_nsp_index, 3164, on pg_collation using btree(collname name_ops, collencoding int4_ops, collnamespace oid_ops));
|
||||
#define CollationNameEncNspIndexId 3164
|
||||
DECLARE_UNIQUE_INDEX(pg_collation_oid_index, 3085, on pg_collation using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_collation_oid_index, 3085, on pg_collation using btree(oid oid_ops));
|
||||
#define CollationOidIndexId 3085
|
||||
|
||||
#ifdef EXPOSE_TO_CLIENT_CODE
|
||||
|
@ -161,7 +161,7 @@ DECLARE_UNIQUE_INDEX(pg_constraint_conrelid_contypid_conname_index, 2665, on pg_
|
||||
#define ConstraintRelidTypidNameIndexId 2665
|
||||
DECLARE_INDEX(pg_constraint_contypid_index, 2666, on pg_constraint using btree(contypid oid_ops));
|
||||
#define ConstraintTypidIndexId 2666
|
||||
DECLARE_UNIQUE_INDEX(pg_constraint_oid_index, 2667, on pg_constraint using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_constraint_oid_index, 2667, on pg_constraint using btree(oid oid_ops));
|
||||
#define ConstraintOidIndexId 2667
|
||||
DECLARE_INDEX(pg_constraint_conparentid_index, 2579, on pg_constraint using btree(conparentid oid_ops));
|
||||
#define ConstraintParentIndexId 2579
|
||||
|
@ -64,7 +64,7 @@ DECLARE_UNIQUE_INDEX(pg_conversion_default_index, 2668, on pg_conversion using b
|
||||
#define ConversionDefaultIndexId 2668
|
||||
DECLARE_UNIQUE_INDEX(pg_conversion_name_nsp_index, 2669, on pg_conversion using btree(conname name_ops, connamespace oid_ops));
|
||||
#define ConversionNameNspIndexId 2669
|
||||
DECLARE_UNIQUE_INDEX(pg_conversion_oid_index, 2670, on pg_conversion using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_conversion_oid_index, 2670, on pg_conversion using btree(oid oid_ops));
|
||||
#define ConversionOidIndexId 2670
|
||||
|
||||
|
||||
|
@ -86,7 +86,7 @@ DECLARE_TOAST(pg_database, 4177, 4178);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_database_datname_index, 2671, on pg_database using btree(datname name_ops));
|
||||
#define DatabaseNameIndexId 2671
|
||||
DECLARE_UNIQUE_INDEX(pg_database_oid_index, 2672, on pg_database using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_database_oid_index, 2672, on pg_database using btree(oid oid_ops));
|
||||
#define DatabaseOidIndexId 2672
|
||||
|
||||
#endif /* PG_DATABASE_H */
|
||||
|
@ -47,7 +47,7 @@ DECLARE_TOAST(pg_db_role_setting, 2966, 2967);
|
||||
#define PgDbRoleSettingToastTable 2966
|
||||
#define PgDbRoleSettingToastIndex 2967
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_db_role_setting_databaseid_rol_index, 2965, on pg_db_role_setting using btree(setdatabase oid_ops, setrole oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_db_role_setting_databaseid_rol_index, 2965, on pg_db_role_setting using btree(setdatabase oid_ops, setrole oid_ops));
|
||||
#define DbRoleSettingDatidRolidIndexId 2965
|
||||
|
||||
/*
|
||||
|
@ -51,7 +51,7 @@ DECLARE_TOAST(pg_default_acl, 4143, 4144);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_default_acl_role_nsp_obj_index, 827, on pg_default_acl using btree(defaclrole oid_ops, defaclnamespace oid_ops, defaclobjtype char_ops));
|
||||
#define DefaultAclRoleNspObjIndexId 827
|
||||
DECLARE_UNIQUE_INDEX(pg_default_acl_oid_index, 828, on pg_default_acl using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_default_acl_oid_index, 828, on pg_default_acl using btree(oid oid_ops));
|
||||
#define DefaultAclOidIndexId 828
|
||||
|
||||
#ifdef EXPOSE_TO_CLIENT_CODE
|
||||
|
@ -65,7 +65,7 @@ typedef FormData_pg_description * Form_pg_description;
|
||||
|
||||
DECLARE_TOAST(pg_description, 2834, 2835);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_description_o_c_o_index, 2675, on pg_description using btree(objoid oid_ops, classoid oid_ops, objsubid int4_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_description_o_c_o_index, 2675, on pg_description using btree(objoid oid_ops, classoid oid_ops, objsubid int4_ops));
|
||||
#define DescriptionObjIndexId 2675
|
||||
|
||||
#endif /* PG_DESCRIPTION_H */
|
||||
|
@ -43,7 +43,7 @@ CATALOG(pg_enum,3501,EnumRelationId)
|
||||
*/
|
||||
typedef FormData_pg_enum *Form_pg_enum;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_enum_oid_index, 3502, on pg_enum using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_enum_oid_index, 3502, on pg_enum using btree(oid oid_ops));
|
||||
#define EnumOidIndexId 3502
|
||||
DECLARE_UNIQUE_INDEX(pg_enum_typid_label_index, 3503, on pg_enum using btree(enumtypid oid_ops, enumlabel name_ops));
|
||||
#define EnumTypIdLabelIndexId 3503
|
||||
|
@ -52,7 +52,7 @@ DECLARE_TOAST(pg_event_trigger, 4145, 4146);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_event_trigger_evtname_index, 3467, on pg_event_trigger using btree(evtname name_ops));
|
||||
#define EventTriggerNameIndexId 3467
|
||||
DECLARE_UNIQUE_INDEX(pg_event_trigger_oid_index, 3468, on pg_event_trigger using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_event_trigger_oid_index, 3468, on pg_event_trigger using btree(oid oid_ops));
|
||||
#define EventTriggerOidIndexId 3468
|
||||
|
||||
#endif /* PG_EVENT_TRIGGER_H */
|
||||
|
@ -51,7 +51,7 @@ typedef FormData_pg_extension *Form_pg_extension;
|
||||
|
||||
DECLARE_TOAST(pg_extension, 4147, 4148);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_extension_oid_index, 3080, on pg_extension using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_extension_oid_index, 3080, on pg_extension using btree(oid oid_ops));
|
||||
#define ExtensionOidIndexId 3080
|
||||
DECLARE_UNIQUE_INDEX(pg_extension_name_index, 3081, on pg_extension using btree(extname name_ops));
|
||||
#define ExtensionNameIndexId 3081
|
||||
|
@ -49,7 +49,7 @@ typedef FormData_pg_foreign_data_wrapper *Form_pg_foreign_data_wrapper;
|
||||
|
||||
DECLARE_TOAST(pg_foreign_data_wrapper, 4149, 4150);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_foreign_data_wrapper_oid_index, 112, on pg_foreign_data_wrapper using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_foreign_data_wrapper_oid_index, 112, on pg_foreign_data_wrapper using btree(oid oid_ops));
|
||||
#define ForeignDataWrapperOidIndexId 112
|
||||
DECLARE_UNIQUE_INDEX(pg_foreign_data_wrapper_name_index, 548, on pg_foreign_data_wrapper using btree(fdwname name_ops));
|
||||
#define ForeignDataWrapperNameIndexId 548
|
||||
|
@ -49,7 +49,7 @@ typedef FormData_pg_foreign_server *Form_pg_foreign_server;
|
||||
|
||||
DECLARE_TOAST(pg_foreign_server, 4151, 4152);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_foreign_server_oid_index, 113, on pg_foreign_server using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_foreign_server_oid_index, 113, on pg_foreign_server using btree(oid oid_ops));
|
||||
#define ForeignServerOidIndexId 113
|
||||
DECLARE_UNIQUE_INDEX(pg_foreign_server_name_index, 549, on pg_foreign_server using btree(srvname name_ops));
|
||||
#define ForeignServerNameIndexId 549
|
||||
|
@ -44,7 +44,7 @@ typedef FormData_pg_foreign_table *Form_pg_foreign_table;
|
||||
|
||||
DECLARE_TOAST(pg_foreign_table, 4153, 4154);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_foreign_table_relid_index, 3119, on pg_foreign_table using btree(ftrelid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_foreign_table_relid_index, 3119, on pg_foreign_table using btree(ftrelid oid_ops));
|
||||
#define ForeignTableRelidIndexId 3119
|
||||
|
||||
#endif /* PG_FOREIGN_TABLE_H */
|
||||
|
@ -69,7 +69,7 @@ typedef FormData_pg_index *Form_pg_index;
|
||||
|
||||
DECLARE_INDEX(pg_index_indrelid_index, 2678, on pg_index using btree(indrelid oid_ops));
|
||||
#define IndexIndrelidIndexId 2678
|
||||
DECLARE_UNIQUE_INDEX(pg_index_indexrelid_index, 2679, on pg_index using btree(indexrelid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_index_indexrelid_index, 2679, on pg_index using btree(indexrelid oid_ops));
|
||||
#define IndexRelidIndexId 2679
|
||||
|
||||
#ifdef EXPOSE_TO_CLIENT_CODE
|
||||
|
@ -43,7 +43,7 @@ CATALOG(pg_inherits,2611,InheritsRelationId)
|
||||
*/
|
||||
typedef FormData_pg_inherits *Form_pg_inherits;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_inherits_relid_seqno_index, 2680, on pg_inherits using btree(inhrelid oid_ops, inhseqno int4_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_inherits_relid_seqno_index, 2680, on pg_inherits using btree(inhrelid oid_ops, inhseqno int4_ops));
|
||||
#define InheritsRelidSeqnoIndexId 2680
|
||||
DECLARE_INDEX(pg_inherits_parent_index, 2187, on pg_inherits using btree(inhparent oid_ops));
|
||||
#define InheritsParentIndexId 2187
|
||||
|
@ -64,7 +64,7 @@ typedef FormData_pg_init_privs * Form_pg_init_privs;
|
||||
|
||||
DECLARE_TOAST(pg_init_privs, 4155, 4156);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_init_privs_o_c_o_index, 3395, on pg_init_privs using btree(objoid oid_ops, classoid oid_ops, objsubid int4_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_init_privs_o_c_o_index, 3395, on pg_init_privs using btree(objoid oid_ops, classoid oid_ops, objsubid int4_ops));
|
||||
#define InitPrivsObjIndexId 3395
|
||||
|
||||
/*
|
||||
|
@ -68,7 +68,7 @@ DECLARE_TOAST(pg_language, 4157, 4158);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_language_name_index, 2681, on pg_language using btree(lanname name_ops));
|
||||
#define LanguageNameIndexId 2681
|
||||
DECLARE_UNIQUE_INDEX(pg_language_oid_index, 2682, on pg_language using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_language_oid_index, 2682, on pg_language using btree(oid oid_ops));
|
||||
#define LanguageOidIndexId 2682
|
||||
|
||||
#endif /* PG_LANGUAGE_H */
|
||||
|
@ -43,7 +43,7 @@ CATALOG(pg_largeobject,2613,LargeObjectRelationId)
|
||||
*/
|
||||
typedef FormData_pg_largeobject *Form_pg_largeobject;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_largeobject_loid_pn_index, 2683, on pg_largeobject using btree(loid oid_ops, pageno int4_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_largeobject_loid_pn_index, 2683, on pg_largeobject using btree(loid oid_ops, pageno int4_ops));
|
||||
#define LargeObjectLOidPNIndexId 2683
|
||||
|
||||
extern Oid LargeObjectCreate(Oid loid);
|
||||
|
@ -45,7 +45,7 @@ CATALOG(pg_largeobject_metadata,2995,LargeObjectMetadataRelationId)
|
||||
*/
|
||||
typedef FormData_pg_largeobject_metadata *Form_pg_largeobject_metadata;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_largeobject_metadata_oid_index, 2996, on pg_largeobject_metadata using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_largeobject_metadata_oid_index, 2996, on pg_largeobject_metadata using btree(oid oid_ops));
|
||||
#define LargeObjectMetadataOidIndexId 2996
|
||||
|
||||
#endif /* PG_LARGEOBJECT_METADATA_H */
|
||||
|
@ -55,7 +55,7 @@ DECLARE_TOAST(pg_namespace, 4163, 4164);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_namespace_nspname_index, 2684, on pg_namespace using btree(nspname name_ops));
|
||||
#define NamespaceNameIndexId 2684
|
||||
DECLARE_UNIQUE_INDEX(pg_namespace_oid_index, 2685, on pg_namespace using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_namespace_oid_index, 2685, on pg_namespace using btree(oid oid_ops));
|
||||
#define NamespaceOidIndexId 2685
|
||||
|
||||
/*
|
||||
|
@ -84,7 +84,7 @@ typedef FormData_pg_opclass *Form_pg_opclass;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_opclass_am_name_nsp_index, 2686, on pg_opclass using btree(opcmethod oid_ops, opcname name_ops, opcnamespace oid_ops));
|
||||
#define OpclassAmNameNspIndexId 2686
|
||||
DECLARE_UNIQUE_INDEX(pg_opclass_oid_index, 2687, on pg_opclass using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_opclass_oid_index, 2687, on pg_opclass using btree(oid oid_ops));
|
||||
#define OpclassOidIndexId 2687
|
||||
|
||||
#endif /* PG_OPCLASS_H */
|
||||
|
@ -82,7 +82,7 @@ CATALOG(pg_operator,2617,OperatorRelationId)
|
||||
*/
|
||||
typedef FormData_pg_operator *Form_pg_operator;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_operator_oid_index, 2688, on pg_operator using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_operator_oid_index, 2688, on pg_operator using btree(oid oid_ops));
|
||||
#define OperatorOidIndexId 2688
|
||||
DECLARE_UNIQUE_INDEX(pg_operator_oprname_l_r_n_index, 2689, on pg_operator using btree(oprname name_ops, oprleft oid_ops, oprright oid_ops, oprnamespace oid_ops));
|
||||
#define OperatorNameNspIndexId 2689
|
||||
|
@ -52,7 +52,7 @@ typedef FormData_pg_opfamily *Form_pg_opfamily;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_opfamily_am_name_nsp_index, 2754, on pg_opfamily using btree(opfmethod oid_ops, opfname name_ops, opfnamespace oid_ops));
|
||||
#define OpfamilyAmNameNspIndexId 2754
|
||||
DECLARE_UNIQUE_INDEX(pg_opfamily_oid_index, 2755, on pg_opfamily using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_opfamily_oid_index, 2755, on pg_opfamily using btree(oid oid_ops));
|
||||
#define OpfamilyOidIndexId 2755
|
||||
|
||||
#ifdef EXPOSE_TO_CLIENT_CODE
|
||||
|
@ -66,7 +66,7 @@ typedef FormData_pg_partitioned_table *Form_pg_partitioned_table;
|
||||
|
||||
DECLARE_TOAST(pg_partitioned_table, 4165, 4166);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_partitioned_table_partrelid_index, 3351, on pg_partitioned_table using btree(partrelid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_partitioned_table_partrelid_index, 3351, on pg_partitioned_table using btree(partrelid oid_ops));
|
||||
#define PartitionedRelidIndexId 3351
|
||||
|
||||
#endif /* PG_PARTITIONED_TABLE_H */
|
||||
|
@ -51,7 +51,7 @@ typedef FormData_pg_policy *Form_pg_policy;
|
||||
|
||||
DECLARE_TOAST(pg_policy, 4167, 4168);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_policy_oid_index, 3257, on pg_policy using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_policy_oid_index, 3257, on pg_policy using btree(oid oid_ops));
|
||||
#define PolicyOidIndexId 3257
|
||||
DECLARE_UNIQUE_INDEX(pg_policy_polrelid_polname_index, 3258, on pg_policy using btree(polrelid oid_ops, polname name_ops));
|
||||
#define PolicyPolrelidPolnameIndexId 3258
|
||||
|
@ -134,7 +134,7 @@ typedef FormData_pg_proc *Form_pg_proc;
|
||||
|
||||
DECLARE_TOAST(pg_proc, 2836, 2837);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_proc_oid_index, 2690, on pg_proc using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_proc_oid_index, 2690, on pg_proc using btree(oid oid_ops));
|
||||
#define ProcedureOidIndexId 2690
|
||||
DECLARE_UNIQUE_INDEX(pg_proc_proname_args_nsp_index, 2691, on pg_proc using btree(proname name_ops, proargtypes oidvector_ops, pronamespace oid_ops));
|
||||
#define ProcedureNameArgsNspIndexId 2691
|
||||
|
@ -63,7 +63,7 @@ CATALOG(pg_publication,6104,PublicationRelationId)
|
||||
*/
|
||||
typedef FormData_pg_publication *Form_pg_publication;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_publication_oid_index, 6110, on pg_publication using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_publication_oid_index, 6110, on pg_publication using btree(oid oid_ops));
|
||||
#define PublicationObjectIndexId 6110
|
||||
DECLARE_UNIQUE_INDEX(pg_publication_pubname_index, 6111, on pg_publication using btree(pubname name_ops));
|
||||
#define PublicationNameIndexId 6111
|
||||
|
@ -40,7 +40,7 @@ CATALOG(pg_publication_rel,6106,PublicationRelRelationId)
|
||||
*/
|
||||
typedef FormData_pg_publication_rel *Form_pg_publication_rel;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_publication_rel_oid_index, 6112, on pg_publication_rel using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_publication_rel_oid_index, 6112, on pg_publication_rel using btree(oid oid_ops));
|
||||
#define PublicationRelObjectIndexId 6112
|
||||
DECLARE_UNIQUE_INDEX(pg_publication_rel_prrelid_prpubid_index, 6113, on pg_publication_rel using btree(prrelid oid_ops, prpubid oid_ops));
|
||||
#define PublicationRelPrrelidPrpubidIndexId 6113
|
||||
|
@ -57,7 +57,7 @@ CATALOG(pg_range,3541,RangeRelationId)
|
||||
*/
|
||||
typedef FormData_pg_range *Form_pg_range;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_range_rngtypid_index, 3542, on pg_range using btree(rngtypid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_range_rngtypid_index, 3542, on pg_range using btree(rngtypid oid_ops));
|
||||
#define RangeTypidIndexId 3542
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_range_rngmultitypid_index, 2228, on pg_range using btree(rngmultitypid oid_ops));
|
||||
|
@ -58,7 +58,7 @@ DECLARE_TOAST(pg_replication_origin, 4181, 4182);
|
||||
#define PgReplicationOriginToastTable 4181
|
||||
#define PgReplicationOriginToastIndex 4182
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_replication_origin_roiident_index, 6001, on pg_replication_origin using btree(roident oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_replication_origin_roiident_index, 6001, on pg_replication_origin using btree(roident oid_ops));
|
||||
#define ReplicationOriginIdentIndex 6001
|
||||
DECLARE_UNIQUE_INDEX(pg_replication_origin_roname_index, 6002, on pg_replication_origin using btree(roname text_ops));
|
||||
#define ReplicationOriginNameIndex 6002
|
||||
|
@ -53,7 +53,7 @@ typedef FormData_pg_rewrite *Form_pg_rewrite;
|
||||
|
||||
DECLARE_TOAST(pg_rewrite, 2838, 2839);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_rewrite_oid_index, 2692, on pg_rewrite using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_rewrite_oid_index, 2692, on pg_rewrite using btree(oid oid_ops));
|
||||
#define RewriteOidIndexId 2692
|
||||
DECLARE_UNIQUE_INDEX(pg_rewrite_rel_rulename_index, 2693, on pg_rewrite using btree(ev_class oid_ops, rulename name_ops));
|
||||
#define RewriteRelRulenameIndexId 2693
|
||||
|
@ -39,7 +39,7 @@ CATALOG(pg_seclabel,3596,SecLabelRelationId)
|
||||
|
||||
DECLARE_TOAST(pg_seclabel, 3598, 3599);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_seclabel_object_index, 3597, on pg_seclabel using btree(objoid oid_ops, classoid oid_ops, objsubid int4_ops, provider text_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_seclabel_object_index, 3597, on pg_seclabel using btree(objoid oid_ops, classoid oid_ops, objsubid int4_ops, provider text_ops));
|
||||
#define SecLabelObjectIndexId 3597
|
||||
|
||||
#endif /* PG_SECLABEL_H */
|
||||
|
@ -39,7 +39,7 @@ CATALOG(pg_sequence,2224,SequenceRelationId)
|
||||
*/
|
||||
typedef FormData_pg_sequence *Form_pg_sequence;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_sequence_seqrelid_index, 5002, on pg_sequence using btree(seqrelid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_sequence_seqrelid_index, 5002, on pg_sequence using btree(seqrelid oid_ops));
|
||||
#define SequenceRelidIndexId 5002
|
||||
|
||||
#endif /* PG_SEQUENCE_H */
|
||||
|
@ -59,7 +59,7 @@ DECLARE_TOAST(pg_shdescription, 2846, 2847);
|
||||
#define PgShdescriptionToastTable 2846
|
||||
#define PgShdescriptionToastIndex 2847
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_shdescription_o_c_index, 2397, on pg_shdescription using btree(objoid oid_ops, classoid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_shdescription_o_c_index, 2397, on pg_shdescription using btree(objoid oid_ops, classoid oid_ops));
|
||||
#define SharedDescriptionObjIndexId 2397
|
||||
|
||||
#endif /* PG_SHDESCRIPTION_H */
|
||||
|
@ -42,7 +42,7 @@ DECLARE_TOAST(pg_shseclabel, 4060, 4061);
|
||||
#define PgShseclabelToastTable 4060
|
||||
#define PgShseclabelToastIndex 4061
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_shseclabel_object_index, 3593, on pg_shseclabel using btree(objoid oid_ops, classoid oid_ops, provider text_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_shseclabel_object_index, 3593, on pg_shseclabel using btree(objoid oid_ops, classoid oid_ops, provider text_ops));
|
||||
#define SharedSecLabelObjectIndexId 3593
|
||||
|
||||
#endif /* PG_SHSECLABEL_H */
|
||||
|
@ -135,7 +135,7 @@ typedef FormData_pg_statistic *Form_pg_statistic;
|
||||
|
||||
DECLARE_TOAST(pg_statistic, 2840, 2841);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_statistic_relid_att_inh_index, 2696, on pg_statistic using btree(starelid oid_ops, staattnum int2_ops, stainherit bool_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_statistic_relid_att_inh_index, 2696, on pg_statistic using btree(starelid oid_ops, staattnum int2_ops, stainherit bool_ops));
|
||||
#define StatisticRelidAttnumInhIndexId 2696
|
||||
|
||||
#ifdef EXPOSE_TO_CLIENT_CODE
|
||||
|
@ -65,7 +65,7 @@ typedef FormData_pg_statistic_ext *Form_pg_statistic_ext;
|
||||
|
||||
DECLARE_TOAST(pg_statistic_ext, 3439, 3440);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_statistic_ext_oid_index, 3380, on pg_statistic_ext using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_statistic_ext_oid_index, 3380, on pg_statistic_ext using btree(oid oid_ops));
|
||||
#define StatisticExtOidIndexId 3380
|
||||
DECLARE_UNIQUE_INDEX(pg_statistic_ext_name_index, 3997, on pg_statistic_ext using btree(stxname name_ops, stxnamespace oid_ops));
|
||||
#define StatisticExtNameIndexId 3997
|
||||
|
@ -51,7 +51,7 @@ typedef FormData_pg_statistic_ext_data * Form_pg_statistic_ext_data;
|
||||
|
||||
DECLARE_TOAST(pg_statistic_ext_data, 3430, 3431);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_statistic_ext_data_stxoid_index, 3433, on pg_statistic_ext_data using btree(stxoid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_statistic_ext_data_stxoid_index, 3433, on pg_statistic_ext_data using btree(stxoid oid_ops));
|
||||
#define StatisticExtDataStxoidIndexId 3433
|
||||
|
||||
#endif /* PG_STATISTIC_EXT_DATA_H */
|
||||
|
@ -74,7 +74,7 @@ DECLARE_TOAST(pg_subscription, 4183, 4184);
|
||||
#define PgSubscriptionToastTable 4183
|
||||
#define PgSubscriptionToastIndex 4184
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_subscription_oid_index, 6114, on pg_subscription using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_subscription_oid_index, 6114, on pg_subscription using btree(oid oid_ops));
|
||||
#define SubscriptionObjectIndexId 6114
|
||||
DECLARE_UNIQUE_INDEX(pg_subscription_subname_index, 6115, on pg_subscription using btree(subdbid oid_ops, subname name_ops));
|
||||
#define SubscriptionNameIndexId 6115
|
||||
|
@ -49,7 +49,7 @@ CATALOG(pg_subscription_rel,6102,SubscriptionRelRelationId)
|
||||
|
||||
typedef FormData_pg_subscription_rel *Form_pg_subscription_rel;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_subscription_rel_srrelid_srsubid_index, 6117, on pg_subscription_rel using btree(srrelid oid_ops, srsubid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_subscription_rel_srrelid_srsubid_index, 6117, on pg_subscription_rel using btree(srrelid oid_ops, srsubid oid_ops));
|
||||
#define SubscriptionRelSrrelidSrsubidIndexId 6117
|
||||
|
||||
#ifdef EXPOSE_TO_CLIENT_CODE
|
||||
|
@ -49,7 +49,7 @@ DECLARE_TOAST(pg_tablespace, 4185, 4186);
|
||||
#define PgTablespaceToastTable 4185
|
||||
#define PgTablespaceToastIndex 4186
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_tablespace_oid_index, 2697, on pg_tablespace using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_tablespace_oid_index, 2697, on pg_tablespace using btree(oid oid_ops));
|
||||
#define TablespaceOidIndexId 2697
|
||||
DECLARE_UNIQUE_INDEX(pg_tablespace_spcname_index, 2698, on pg_tablespace using btree(spcname name_ops));
|
||||
#define TablespaceNameIndexId 2698
|
||||
|
@ -42,7 +42,7 @@ CATALOG(pg_transform,3576,TransformRelationId)
|
||||
*/
|
||||
typedef FormData_pg_transform *Form_pg_transform;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_transform_oid_index, 3574, on pg_transform using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_transform_oid_index, 3574, on pg_transform using btree(oid oid_ops));
|
||||
#define TransformOidIndexId 3574
|
||||
DECLARE_UNIQUE_INDEX(pg_transform_type_lang_index, 3575, on pg_transform using btree(trftype oid_ops, trflang oid_ops));
|
||||
#define TransformTypeLangIndexId 3575
|
||||
|
@ -78,7 +78,7 @@ DECLARE_INDEX(pg_trigger_tgconstraint_index, 2699, on pg_trigger using btree(tgc
|
||||
#define TriggerConstraintIndexId 2699
|
||||
DECLARE_UNIQUE_INDEX(pg_trigger_tgrelid_tgname_index, 2701, on pg_trigger using btree(tgrelid oid_ops, tgname name_ops));
|
||||
#define TriggerRelidNameIndexId 2701
|
||||
DECLARE_UNIQUE_INDEX(pg_trigger_oid_index, 2702, on pg_trigger using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_trigger_oid_index, 2702, on pg_trigger using btree(oid oid_ops));
|
||||
#define TriggerOidIndexId 2702
|
||||
|
||||
#ifdef EXPOSE_TO_CLIENT_CODE
|
||||
|
@ -49,7 +49,7 @@ typedef FormData_pg_ts_config *Form_pg_ts_config;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_ts_config_cfgname_index, 3608, on pg_ts_config using btree(cfgname name_ops, cfgnamespace oid_ops));
|
||||
#define TSConfigNameNspIndexId 3608
|
||||
DECLARE_UNIQUE_INDEX(pg_ts_config_oid_index, 3712, on pg_ts_config using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_ts_config_oid_index, 3712, on pg_ts_config using btree(oid oid_ops));
|
||||
#define TSConfigOidIndexId 3712
|
||||
|
||||
#endif /* PG_TS_CONFIG_H */
|
||||
|
@ -44,7 +44,7 @@ CATALOG(pg_ts_config_map,3603,TSConfigMapRelationId)
|
||||
|
||||
typedef FormData_pg_ts_config_map *Form_pg_ts_config_map;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_ts_config_map_index, 3609, on pg_ts_config_map using btree(mapcfg oid_ops, maptokentype int4_ops, mapseqno int4_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_ts_config_map_index, 3609, on pg_ts_config_map using btree(mapcfg oid_ops, maptokentype int4_ops, mapseqno int4_ops));
|
||||
#define TSConfigMapIndexId 3609
|
||||
|
||||
#endif /* PG_TS_CONFIG_MAP_H */
|
||||
|
@ -55,7 +55,7 @@ DECLARE_TOAST(pg_ts_dict, 4169, 4170);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_ts_dict_dictname_index, 3604, on pg_ts_dict using btree(dictname name_ops, dictnamespace oid_ops));
|
||||
#define TSDictionaryNameNspIndexId 3604
|
||||
DECLARE_UNIQUE_INDEX(pg_ts_dict_oid_index, 3605, on pg_ts_dict using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_ts_dict_oid_index, 3605, on pg_ts_dict using btree(oid oid_ops));
|
||||
#define TSDictionaryOidIndexId 3605
|
||||
|
||||
#endif /* PG_TS_DICT_H */
|
||||
|
@ -56,7 +56,7 @@ typedef FormData_pg_ts_parser *Form_pg_ts_parser;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_ts_parser_prsname_index, 3606, on pg_ts_parser using btree(prsname name_ops, prsnamespace oid_ops));
|
||||
#define TSParserNameNspIndexId 3606
|
||||
DECLARE_UNIQUE_INDEX(pg_ts_parser_oid_index, 3607, on pg_ts_parser using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_ts_parser_oid_index, 3607, on pg_ts_parser using btree(oid oid_ops));
|
||||
#define TSParserOidIndexId 3607
|
||||
|
||||
#endif /* PG_TS_PARSER_H */
|
||||
|
@ -47,7 +47,7 @@ typedef FormData_pg_ts_template *Form_pg_ts_template;
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_ts_template_tmplname_index, 3766, on pg_ts_template using btree(tmplname name_ops, tmplnamespace oid_ops));
|
||||
#define TSTemplateNameNspIndexId 3766
|
||||
DECLARE_UNIQUE_INDEX(pg_ts_template_oid_index, 3767, on pg_ts_template using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_ts_template_oid_index, 3767, on pg_ts_template using btree(oid oid_ops));
|
||||
#define TSTemplateOidIndexId 3767
|
||||
|
||||
#endif /* PG_TS_TEMPLATE_H */
|
||||
|
@ -262,7 +262,7 @@ typedef FormData_pg_type *Form_pg_type;
|
||||
|
||||
DECLARE_TOAST(pg_type, 4171, 4172);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_type_oid_index, 2703, on pg_type using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_type_oid_index, 2703, on pg_type using btree(oid oid_ops));
|
||||
#define TypeOidIndexId 2703
|
||||
DECLARE_UNIQUE_INDEX(pg_type_typname_nsp_index, 2704, on pg_type using btree(typname name_ops, typnamespace oid_ops));
|
||||
#define TypeNameNspIndexId 2704
|
||||
|
@ -47,7 +47,7 @@ typedef FormData_pg_user_mapping *Form_pg_user_mapping;
|
||||
|
||||
DECLARE_TOAST(pg_user_mapping, 4173, 4174);
|
||||
|
||||
DECLARE_UNIQUE_INDEX(pg_user_mapping_oid_index, 174, on pg_user_mapping using btree(oid oid_ops));
|
||||
DECLARE_UNIQUE_INDEX_PKEY(pg_user_mapping_oid_index, 174, on pg_user_mapping using btree(oid oid_ops));
|
||||
#define UserMappingOidIndexId 174
|
||||
DECLARE_UNIQUE_INDEX(pg_user_mapping_user_server_index, 175, on pg_user_mapping using btree(umuser oid_ops, umserver oid_ops));
|
||||
#define UserMappingUserServerIndexId 175
|
||||
|
@ -16,7 +16,7 @@ DETAIL: System catalog modifications are currently disallowed.
|
||||
CREATE TABLE t1x (a int, b anyarray);
|
||||
ERROR: column "b" has pseudo-type anyarray
|
||||
-- index on system catalog
|
||||
ALTER TABLE pg_namespace ADD UNIQUE USING INDEX pg_namespace_oid_index;
|
||||
ALTER TABLE pg_namespace ADD CONSTRAINT foo UNIQUE USING INDEX pg_namespace_nspname_index;
|
||||
ERROR: permission denied: "pg_namespace" is a system catalog
|
||||
-- write to system catalog table as superuser
|
||||
-- (allowed even without allow_system_table_mods)
|
||||
@ -102,7 +102,8 @@ CREATE TABLE t1 (a int, b anyarray);
|
||||
ROLLBACK;
|
||||
-- index on system catalog
|
||||
BEGIN;
|
||||
ALTER TABLE pg_namespace ADD UNIQUE USING INDEX pg_namespace_oid_index;
|
||||
ALTER TABLE pg_namespace ADD CONSTRAINT foo UNIQUE USING INDEX pg_namespace_nspname_index;
|
||||
NOTICE: ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index "pg_namespace_nspname_index" to "foo"
|
||||
ROLLBACK;
|
||||
-- write to system catalog table as superuser
|
||||
BEGIN;
|
||||
@ -146,7 +147,6 @@ ALTER TABLE pg_description ALTER COLUMN description SET STATISTICS -1;
|
||||
ROLLBACK;
|
||||
-- foreign key referencing catalog
|
||||
BEGIN;
|
||||
ALTER TABLE pg_description ADD PRIMARY KEY USING INDEX pg_description_o_c_o_index;
|
||||
CREATE TABLE foo (a oid, b oid, c int, FOREIGN KEY (a, b, c) REFERENCES pg_description);
|
||||
ROLLBACK;
|
||||
-- RangeVarCallbackOwnsRelation()
|
||||
|
@ -18,7 +18,7 @@ CREATE TABLE pg_catalog.test (a int);
|
||||
CREATE TABLE t1x (a int, b anyarray);
|
||||
|
||||
-- index on system catalog
|
||||
ALTER TABLE pg_namespace ADD UNIQUE USING INDEX pg_namespace_oid_index;
|
||||
ALTER TABLE pg_namespace ADD CONSTRAINT foo UNIQUE USING INDEX pg_namespace_nspname_index;
|
||||
|
||||
-- write to system catalog table as superuser
|
||||
-- (allowed even without allow_system_table_mods)
|
||||
@ -104,7 +104,7 @@ ROLLBACK;
|
||||
|
||||
-- index on system catalog
|
||||
BEGIN;
|
||||
ALTER TABLE pg_namespace ADD UNIQUE USING INDEX pg_namespace_oid_index;
|
||||
ALTER TABLE pg_namespace ADD CONSTRAINT foo UNIQUE USING INDEX pg_namespace_nspname_index;
|
||||
ROLLBACK;
|
||||
|
||||
-- write to system catalog table as superuser
|
||||
@ -156,7 +156,6 @@ ROLLBACK;
|
||||
|
||||
-- foreign key referencing catalog
|
||||
BEGIN;
|
||||
ALTER TABLE pg_description ADD PRIMARY KEY USING INDEX pg_description_o_c_o_index;
|
||||
CREATE TABLE foo (a oid, b oid, c int, FOREIGN KEY (a, b, c) REFERENCES pg_description);
|
||||
ROLLBACK;
|
||||
|
||||
|
@ -43,6 +43,9 @@ WHERE refclassid = 0 OR refobjid = 0 OR
|
||||
-- whatever OID the test is complaining about must have been added later
|
||||
-- in initdb, where it intentionally isn't pinned. Legitimate exceptions
|
||||
-- to that rule are listed in the comments in setup_depend().
|
||||
-- Currently, pg_rewrite is also listed by this check, even though it is
|
||||
-- covered by setup_depend(). That happens because there are no rules in
|
||||
-- the pinned data, but initdb creates some intentionally-not-pinned views.
|
||||
do $$
|
||||
declare relnm text;
|
||||
reloid oid;
|
||||
@ -73,7 +76,6 @@ loop
|
||||
end if;
|
||||
end loop;
|
||||
end$$;
|
||||
NOTICE: pg_constraint contains unpinned initdb-created object(s)
|
||||
NOTICE: pg_database contains unpinned initdb-created object(s)
|
||||
NOTICE: pg_extension contains unpinned initdb-created object(s)
|
||||
NOTICE: pg_rewrite contains unpinned initdb-created object(s)
|
||||
@ -109,3 +111,30 @@ ORDER BY 1, 2;
|
||||
pg_largeobject_metadata | lomacl | aclitem[]
|
||||
(11 rows)
|
||||
|
||||
-- system catalogs without primary keys
|
||||
--
|
||||
-- Current exceptions:
|
||||
-- * pg_depend, pg_shdepend don't have a unique key
|
||||
SELECT relname
|
||||
FROM pg_class
|
||||
WHERE relnamespace = 'pg_catalog'::regnamespace AND relkind = 'r'
|
||||
AND pg_class.oid NOT IN (SELECT indrelid FROM pg_index WHERE indisprimary)
|
||||
ORDER BY 1;
|
||||
relname
|
||||
-------------
|
||||
pg_depend
|
||||
pg_shdepend
|
||||
(2 rows)
|
||||
|
||||
-- system catalog unique indexes not wrapped in a constraint
|
||||
-- (There should be none.)
|
||||
SELECT relname
|
||||
FROM pg_class c JOIN pg_index i ON c.oid = i.indexrelid
|
||||
WHERE relnamespace = 'pg_catalog'::regnamespace AND relkind = 'i'
|
||||
AND i.indisunique
|
||||
AND c.oid NOT IN (SELECT conindid FROM pg_constraint)
|
||||
ORDER BY 1;
|
||||
relname
|
||||
---------
|
||||
(0 rows)
|
||||
|
||||
|
@ -44,6 +44,9 @@ WHERE refclassid = 0 OR refobjid = 0 OR
|
||||
-- whatever OID the test is complaining about must have been added later
|
||||
-- in initdb, where it intentionally isn't pinned. Legitimate exceptions
|
||||
-- to that rule are listed in the comments in setup_depend().
|
||||
-- Currently, pg_rewrite is also listed by this check, even though it is
|
||||
-- covered by setup_depend(). That happens because there are no rules in
|
||||
-- the pinned data, but initdb creates some intentionally-not-pinned views.
|
||||
|
||||
do $$
|
||||
declare relnm text;
|
||||
@ -94,3 +97,24 @@ WHERE c.oid < 16384 AND
|
||||
relkind = 'r' AND
|
||||
attstorage != 'p'
|
||||
ORDER BY 1, 2;
|
||||
|
||||
|
||||
-- system catalogs without primary keys
|
||||
--
|
||||
-- Current exceptions:
|
||||
-- * pg_depend, pg_shdepend don't have a unique key
|
||||
SELECT relname
|
||||
FROM pg_class
|
||||
WHERE relnamespace = 'pg_catalog'::regnamespace AND relkind = 'r'
|
||||
AND pg_class.oid NOT IN (SELECT indrelid FROM pg_index WHERE indisprimary)
|
||||
ORDER BY 1;
|
||||
|
||||
|
||||
-- system catalog unique indexes not wrapped in a constraint
|
||||
-- (There should be none.)
|
||||
SELECT relname
|
||||
FROM pg_class c JOIN pg_index i ON c.oid = i.indexrelid
|
||||
WHERE relnamespace = 'pg_catalog'::regnamespace AND relkind = 'i'
|
||||
AND i.indisunique
|
||||
AND c.oid NOT IN (SELECT conindid FROM pg_constraint)
|
||||
ORDER BY 1;
|
||||
|
@ -71,6 +71,7 @@ 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\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\system_constraints.sql del /q src\backend\catalog\system_constraints.sql
|
||||
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\bki-stamp del /q src\backend\catalog\bki-stamp
|
||||
|
Loading…
x
Reference in New Issue
Block a user