public inbox for [email protected]
help / color / mirror / Atom feed[PATCH v5 07/12] consistent language: to which
12+ messages / 4 participants
[nested] [flat]
* [PATCH v5 07/12] consistent language: to which
@ 2019-05-21 00:02 Justin Pryzby <[email protected]>
0 siblings, 0 replies; 12+ messages in thread
From: Justin Pryzby @ 2019-05-21 00:02 UTC (permalink / raw)
XXX: should have trailing period in tables?
---
doc/src/sgml/monitoring.sgml | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml
index cba36c0..df5df62 100644
--- a/doc/src/sgml/monitoring.sgml
+++ b/doc/src/sgml/monitoring.sgml
@@ -602,12 +602,12 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser
<row>
<entry><structfield>datid</structfield></entry>
<entry><type>oid</type></entry>
- <entry>OID of the database this backend is connected to</entry>
+ <entry>OID of the database to which this backend is connected</entry>
</row>
<row>
<entry><structfield>datname</structfield></entry>
<entry><type>name</type></entry>
- <entry>Name of the database this backend is connected to</entry>
+ <entry>Name of the database to which this backend is connected</entry>
</row>
<row>
<entry><structfield>pid</structfield></entry>
@@ -2099,7 +2099,7 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i
<entry><type>text</type></entry>
<entry>
Host of the <productname>PostgreSQL</productname> instance
- this WAL receiver is connected to. This can be a host name,
+ to which this WAL receiver is connected. This can be a host name,
an IP address, or a directory path if the connection is via
Unix socket. (The path case can be distinguished because it
will always be an absolute path, beginning with <literal>/</literal>.)
@@ -2110,7 +2110,7 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i
<entry><type>integer</type></entry>
<entry>
Port number of the <productname>PostgreSQL</productname> instance
- this WAL receiver is connected to.
+ to which this WAL receiver is connected.
</entry>
</row>
<row>
@@ -3375,7 +3375,7 @@ SELECT pg_stat_get_backend_pid(s.backendid) AS pid,
<row>
<entry><literal><function>pg_stat_get_backend_dbid(integer)</function></literal></entry>
<entry><type>oid</type></entry>
- <entry>OID of the database this backend is connected to</entry>
+ <entry>OID of the database to which this backend is connected</entry>
</row>
<row>
--
2.7.4
--FkmkrVfFsRoUs1wW
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
filename="v5-0008-Consistent-language-contains.patch"
^ permalink raw reply [nested|flat] 12+ messages in thread
* Re: pgsql: Refactor to add pg_strcoll(), pg_strxfrm(), and variants.
@ 2023-02-24 01:07 Justin Pryzby <[email protected]>
0 siblings, 0 replies; 12+ messages in thread
From: Justin Pryzby @ 2023-02-24 01:07 UTC (permalink / raw)
To: Thomas Munro <[email protected]>; +Cc: Jeff Davis <[email protected]>; [email protected]
On Fri, Feb 24, 2023 at 01:56:05PM +1300, Thomas Munro wrote:
> On Fri, Feb 24, 2023 at 1:20 PM Justin Pryzby <[email protected]> wrote:
> > These patches cause warnings under MSVC.
> >
> > Of course my patch to improve CI by warning about compiler warnings is
> > the only one to notice.
> >
> > https://cirrus-ci.com/task/6199582053367808
>
> It's a shame that it fails the whole Windows task, whereas for the
> Unixen we don't do -Werror so you can still see if everything else is
> OK, but then we check for errors in a separate task. I don't have any
> ideas on how to achieve that, though.
My patch isn't very pretty, but you can see that runs all the tests
before grepping for warnings, rather than failing during compilation as
you said.
IMO the compiler warnings task is separate not only "to avoid failing
the whole task during compilation", but because it's compiled with
optimization. Which is 1) needed to allow some warnings to be warned
about; and, 2) harmful to enable during the "check-world" tests, since
it makes backtraces less accurate.
--
Justin
^ permalink raw reply [nested|flat] 12+ messages in thread
* [PATCH v17 1/3] Remember PK oid for partitioned tables even when it's invalid
@ 2023-07-12 16:57 Alvaro Herrera <[email protected]>
0 siblings, 0 replies; 12+ messages in thread
From: Alvaro Herrera @ 2023-07-12 16:57 UTC (permalink / raw)
---
src/backend/utils/cache/relcache.c | 34 ++++++++++++++++++++++++------
1 file changed, 28 insertions(+), 6 deletions(-)
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 8e08ca1c68..7234cb3da6 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -4789,19 +4789,41 @@ RelationGetIndexList(Relation relation)
result = lappend_oid(result, index->indexrelid);
/*
- * Invalid, non-unique, non-immediate or predicate indexes aren't
- * interesting for either oid indexes or replication identity indexes,
- * so don't check them.
+ * Non-unique, non-immediate or predicate indexes aren't interesting
+ * for either oid indexes or replication identity indexes, so don't
+ * check them.
*/
- if (!index->indisvalid || !index->indisunique ||
+ if (!index->indisunique ||
!index->indimmediate ||
!heap_attisnull(htup, Anum_pg_index_indpred, NULL))
continue;
- /* remember primary key index if any */
- if (index->indisprimary)
+ /*
+ * Remember primary key index, if any. We do this only if the index
+ * is valid; but if the table is partitioned, then we do it even if
+ * it's invalid.
+ *
+ * The reason for returning invalid primary keys for foreign tables is
+ * because of pg_dump of NOT NULL constraints, and the fact that PKs
+ * remain marked invalid until the partitions' PKs are attached to it.
+ * If we make rd_pkindex invalid, then the attnotnull flag is reset
+ * after the PK is created, which causes the ALTER INDEX ATTACH
+ * PARTITION to fail with 'column ... is not marked NOT NULL'. With
+ * this, dropconstraint_internal() will believe that the columns must
+ * not have attnotnull reset, so the PKs-on-partitions can be attached
+ * correctly, until finally the PK-on-parent is marked valid.
+ *
+ * Also, this doesn't harm anything, because rd_pkindex is not a
+ * "real" index anyway, but a RELKIND_PARTITIONED_INDEX.
+ */
+ if (index->indisprimary &&
+ (index->indisvalid ||
+ relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE))
pkeyIndex = index->indexrelid;
+ if (!index->indisvalid)
+ continue;
+
/* remember explicitly chosen replica index */
if (index->indisreplident)
candidateIndex = index->indexrelid;
--
2.39.2
--u5bqxbslpyv5rwih
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
filename="v17-0002-Add-pg_constraint-rows-for-NOT-NULL-constraints.patch"
^ permalink raw reply [nested|flat] 12+ messages in thread
* [PATCH v17 1/3] Remember PK oid for partitioned tables even when it's invalid
@ 2023-07-12 16:57 Alvaro Herrera <[email protected]>
0 siblings, 0 replies; 12+ messages in thread
From: Alvaro Herrera @ 2023-07-12 16:57 UTC (permalink / raw)
---
src/backend/utils/cache/relcache.c | 34 ++++++++++++++++++++++++------
1 file changed, 28 insertions(+), 6 deletions(-)
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 8e08ca1c68..7234cb3da6 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -4789,19 +4789,41 @@ RelationGetIndexList(Relation relation)
result = lappend_oid(result, index->indexrelid);
/*
- * Invalid, non-unique, non-immediate or predicate indexes aren't
- * interesting for either oid indexes or replication identity indexes,
- * so don't check them.
+ * Non-unique, non-immediate or predicate indexes aren't interesting
+ * for either oid indexes or replication identity indexes, so don't
+ * check them.
*/
- if (!index->indisvalid || !index->indisunique ||
+ if (!index->indisunique ||
!index->indimmediate ||
!heap_attisnull(htup, Anum_pg_index_indpred, NULL))
continue;
- /* remember primary key index if any */
- if (index->indisprimary)
+ /*
+ * Remember primary key index, if any. We do this only if the index
+ * is valid; but if the table is partitioned, then we do it even if
+ * it's invalid.
+ *
+ * The reason for returning invalid primary keys for foreign tables is
+ * because of pg_dump of NOT NULL constraints, and the fact that PKs
+ * remain marked invalid until the partitions' PKs are attached to it.
+ * If we make rd_pkindex invalid, then the attnotnull flag is reset
+ * after the PK is created, which causes the ALTER INDEX ATTACH
+ * PARTITION to fail with 'column ... is not marked NOT NULL'. With
+ * this, dropconstraint_internal() will believe that the columns must
+ * not have attnotnull reset, so the PKs-on-partitions can be attached
+ * correctly, until finally the PK-on-parent is marked valid.
+ *
+ * Also, this doesn't harm anything, because rd_pkindex is not a
+ * "real" index anyway, but a RELKIND_PARTITIONED_INDEX.
+ */
+ if (index->indisprimary &&
+ (index->indisvalid ||
+ relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE))
pkeyIndex = index->indexrelid;
+ if (!index->indisvalid)
+ continue;
+
/* remember explicitly chosen replica index */
if (index->indisreplident)
candidateIndex = index->indexrelid;
--
2.39.2
--u5bqxbslpyv5rwih
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
filename="v17-0002-Add-pg_constraint-rows-for-NOT-NULL-constraints.patch"
^ permalink raw reply [nested|flat] 12+ messages in thread
* [PATCH v13 1/2] Remember PK oid for partitioned tables even when it's invalid
@ 2023-07-12 16:57 Alvaro Herrera <[email protected]>
0 siblings, 0 replies; 12+ messages in thread
From: Alvaro Herrera @ 2023-07-12 16:57 UTC (permalink / raw)
---
src/backend/utils/cache/relcache.c | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 8a08463c2b..b5a99b4edc 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -4788,19 +4788,28 @@ RelationGetIndexList(Relation relation)
result = lappend_oid(result, index->indexrelid);
/*
- * Invalid, non-unique, non-immediate or predicate indexes aren't
- * interesting for either oid indexes or replication identity indexes,
- * so don't check them.
+ * Non-unique, non-immediate or predicate indexes aren't interesting
+ * for either oid indexes or replication identity indexes, so don't
+ * check them.
*/
- if (!index->indisvalid || !index->indisunique ||
+ if (!index->indisunique ||
!index->indimmediate ||
!heap_attisnull(htup, Anum_pg_index_indpred, NULL))
continue;
- /* remember primary key index if any */
- if (index->indisprimary)
+ /*
+ * Remember primary key index, if any. We do this only if the index
+ * is valid; but if the table is partitioned, then we do it even if
+ * it's invalid. XXX does this cause other problems?
+ */
+ if (index->indisprimary &&
+ (index->indisvalid ||
+ relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE))
pkeyIndex = index->indexrelid;
+ if (!index->indisvalid)
+ continue;
+
/* remember explicitly chosen replica index */
if (index->indisreplident)
candidateIndex = index->indexrelid;
--
2.39.2
--57gotikuhuh4be5c
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
filename="v13-0002-Add-pg_constraint-rows-for-NOT-NULL-constraints.patch"
^ permalink raw reply [nested|flat] 12+ messages in thread
* [PATCH v14 1/2] Remember PK oid for partitioned tables even when it's invalid
@ 2023-07-12 16:57 Alvaro Herrera <[email protected]>
0 siblings, 0 replies; 12+ messages in thread
From: Alvaro Herrera @ 2023-07-12 16:57 UTC (permalink / raw)
---
src/backend/utils/cache/relcache.c | 34 ++++++++++++++++++++++++------
1 file changed, 28 insertions(+), 6 deletions(-)
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 8e28335915..7c3bfde571 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -4789,19 +4789,41 @@ RelationGetIndexList(Relation relation)
result = lappend_oid(result, index->indexrelid);
/*
- * Invalid, non-unique, non-immediate or predicate indexes aren't
- * interesting for either oid indexes or replication identity indexes,
- * so don't check them.
+ * Non-unique, non-immediate or predicate indexes aren't interesting
+ * for either oid indexes or replication identity indexes, so don't
+ * check them.
*/
- if (!index->indisvalid || !index->indisunique ||
+ if (!index->indisunique ||
!index->indimmediate ||
!heap_attisnull(htup, Anum_pg_index_indpred, NULL))
continue;
- /* remember primary key index if any */
- if (index->indisprimary)
+ /*
+ * Remember primary key index, if any. We do this only if the index
+ * is valid; but if the table is partitioned, then we do it even if
+ * it's invalid.
+ *
+ * The reason for returning invalid primary keys for foreign tables is
+ * because of pg_dump of NOT NULL constraints, and the fact that PKs
+ * remain marked invalid until the partitions' PKs are attached to it.
+ * If we make rd_pkindex invalid, then the attnotnull flag is reset
+ * after the PK is created, which causes the ALTER INDEX ATTACH
+ * PARTITION to fail with 'column ... is not marked NOT NULL'. With
+ * this, dropconstraint_internal() will believe that the columns must
+ * not have attnotnull reset, so the PKs-on-partitions can be attached
+ * correctly, until finally the PK-on-parent is marked valid.
+ *
+ * Also, this doesn't harm anything, because rd_pkindex is not a
+ * "real" index anyway, but a RELKIND_PARTITIONED_INDEX.
+ */
+ if (index->indisprimary &&
+ (index->indisvalid ||
+ relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE))
pkeyIndex = index->indexrelid;
+ if (!index->indisvalid)
+ continue;
+
/* remember explicitly chosen replica index */
if (index->indisreplident)
candidateIndex = index->indexrelid;
--
2.39.2
--6opfqulj2xnxqhkn
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
filename="v14-0002-Add-pg_constraint-rows-for-NOT-NULL-constraints.patch"
^ permalink raw reply [nested|flat] 12+ messages in thread
* [PATCH v17 1/3] Remember PK oid for partitioned tables even when it's invalid
@ 2023-07-12 16:57 Alvaro Herrera <[email protected]>
0 siblings, 0 replies; 12+ messages in thread
From: Alvaro Herrera @ 2023-07-12 16:57 UTC (permalink / raw)
---
src/backend/utils/cache/relcache.c | 34 ++++++++++++++++++++++++------
1 file changed, 28 insertions(+), 6 deletions(-)
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 8e08ca1c68..7234cb3da6 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -4789,19 +4789,41 @@ RelationGetIndexList(Relation relation)
result = lappend_oid(result, index->indexrelid);
/*
- * Invalid, non-unique, non-immediate or predicate indexes aren't
- * interesting for either oid indexes or replication identity indexes,
- * so don't check them.
+ * Non-unique, non-immediate or predicate indexes aren't interesting
+ * for either oid indexes or replication identity indexes, so don't
+ * check them.
*/
- if (!index->indisvalid || !index->indisunique ||
+ if (!index->indisunique ||
!index->indimmediate ||
!heap_attisnull(htup, Anum_pg_index_indpred, NULL))
continue;
- /* remember primary key index if any */
- if (index->indisprimary)
+ /*
+ * Remember primary key index, if any. We do this only if the index
+ * is valid; but if the table is partitioned, then we do it even if
+ * it's invalid.
+ *
+ * The reason for returning invalid primary keys for foreign tables is
+ * because of pg_dump of NOT NULL constraints, and the fact that PKs
+ * remain marked invalid until the partitions' PKs are attached to it.
+ * If we make rd_pkindex invalid, then the attnotnull flag is reset
+ * after the PK is created, which causes the ALTER INDEX ATTACH
+ * PARTITION to fail with 'column ... is not marked NOT NULL'. With
+ * this, dropconstraint_internal() will believe that the columns must
+ * not have attnotnull reset, so the PKs-on-partitions can be attached
+ * correctly, until finally the PK-on-parent is marked valid.
+ *
+ * Also, this doesn't harm anything, because rd_pkindex is not a
+ * "real" index anyway, but a RELKIND_PARTITIONED_INDEX.
+ */
+ if (index->indisprimary &&
+ (index->indisvalid ||
+ relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE))
pkeyIndex = index->indexrelid;
+ if (!index->indisvalid)
+ continue;
+
/* remember explicitly chosen replica index */
if (index->indisreplident)
candidateIndex = index->indexrelid;
--
2.39.2
--u5bqxbslpyv5rwih
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
filename="v17-0002-Add-pg_constraint-rows-for-NOT-NULL-constraints.patch"
^ permalink raw reply [nested|flat] 12+ messages in thread
* [PATCH v15 1/2] Remember PK oid for partitioned tables even when it's invalid
@ 2023-07-12 16:57 Alvaro Herrera <[email protected]>
0 siblings, 0 replies; 12+ messages in thread
From: Alvaro Herrera @ 2023-07-12 16:57 UTC (permalink / raw)
---
src/backend/utils/cache/relcache.c | 34 ++++++++++++++++++++++++------
1 file changed, 28 insertions(+), 6 deletions(-)
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 8e28335915..7c3bfde571 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -4789,19 +4789,41 @@ RelationGetIndexList(Relation relation)
result = lappend_oid(result, index->indexrelid);
/*
- * Invalid, non-unique, non-immediate or predicate indexes aren't
- * interesting for either oid indexes or replication identity indexes,
- * so don't check them.
+ * Non-unique, non-immediate or predicate indexes aren't interesting
+ * for either oid indexes or replication identity indexes, so don't
+ * check them.
*/
- if (!index->indisvalid || !index->indisunique ||
+ if (!index->indisunique ||
!index->indimmediate ||
!heap_attisnull(htup, Anum_pg_index_indpred, NULL))
continue;
- /* remember primary key index if any */
- if (index->indisprimary)
+ /*
+ * Remember primary key index, if any. We do this only if the index
+ * is valid; but if the table is partitioned, then we do it even if
+ * it's invalid.
+ *
+ * The reason for returning invalid primary keys for foreign tables is
+ * because of pg_dump of NOT NULL constraints, and the fact that PKs
+ * remain marked invalid until the partitions' PKs are attached to it.
+ * If we make rd_pkindex invalid, then the attnotnull flag is reset
+ * after the PK is created, which causes the ALTER INDEX ATTACH
+ * PARTITION to fail with 'column ... is not marked NOT NULL'. With
+ * this, dropconstraint_internal() will believe that the columns must
+ * not have attnotnull reset, so the PKs-on-partitions can be attached
+ * correctly, until finally the PK-on-parent is marked valid.
+ *
+ * Also, this doesn't harm anything, because rd_pkindex is not a
+ * "real" index anyway, but a RELKIND_PARTITIONED_INDEX.
+ */
+ if (index->indisprimary &&
+ (index->indisvalid ||
+ relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE))
pkeyIndex = index->indexrelid;
+ if (!index->indisvalid)
+ continue;
+
/* remember explicitly chosen replica index */
if (index->indisreplident)
candidateIndex = index->indexrelid;
--
2.39.2
--icqk4nrzalktuh5g
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
filename="v15-0002-Add-pg_constraint-rows-for-NOT-NULL-constraints.patch"
^ permalink raw reply [nested|flat] 12+ messages in thread
* [PATCH v16 1/3] Remember PK oid for partitioned tables even when it's invalid
@ 2023-07-12 16:57 Alvaro Herrera <[email protected]>
0 siblings, 0 replies; 12+ messages in thread
From: Alvaro Herrera @ 2023-07-12 16:57 UTC (permalink / raw)
---
src/backend/utils/cache/relcache.c | 34 ++++++++++++++++++++++++------
1 file changed, 28 insertions(+), 6 deletions(-)
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 8e28335915..7c3bfde571 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -4789,19 +4789,41 @@ RelationGetIndexList(Relation relation)
result = lappend_oid(result, index->indexrelid);
/*
- * Invalid, non-unique, non-immediate or predicate indexes aren't
- * interesting for either oid indexes or replication identity indexes,
- * so don't check them.
+ * Non-unique, non-immediate or predicate indexes aren't interesting
+ * for either oid indexes or replication identity indexes, so don't
+ * check them.
*/
- if (!index->indisvalid || !index->indisunique ||
+ if (!index->indisunique ||
!index->indimmediate ||
!heap_attisnull(htup, Anum_pg_index_indpred, NULL))
continue;
- /* remember primary key index if any */
- if (index->indisprimary)
+ /*
+ * Remember primary key index, if any. We do this only if the index
+ * is valid; but if the table is partitioned, then we do it even if
+ * it's invalid.
+ *
+ * The reason for returning invalid primary keys for foreign tables is
+ * because of pg_dump of NOT NULL constraints, and the fact that PKs
+ * remain marked invalid until the partitions' PKs are attached to it.
+ * If we make rd_pkindex invalid, then the attnotnull flag is reset
+ * after the PK is created, which causes the ALTER INDEX ATTACH
+ * PARTITION to fail with 'column ... is not marked NOT NULL'. With
+ * this, dropconstraint_internal() will believe that the columns must
+ * not have attnotnull reset, so the PKs-on-partitions can be attached
+ * correctly, until finally the PK-on-parent is marked valid.
+ *
+ * Also, this doesn't harm anything, because rd_pkindex is not a
+ * "real" index anyway, but a RELKIND_PARTITIONED_INDEX.
+ */
+ if (index->indisprimary &&
+ (index->indisvalid ||
+ relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE))
pkeyIndex = index->indexrelid;
+ if (!index->indisvalid)
+ continue;
+
/* remember explicitly chosen replica index */
if (index->indisreplident)
candidateIndex = index->indexrelid;
--
2.39.2
--arayebouu3vhq6bx
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
filename="v16-0002-Add-pg_constraint-rows-for-NOT-NULL-constraints.patch"
^ permalink raw reply [nested|flat] 12+ messages in thread
* [PATCH v15 1/2] Remember PK oid for partitioned tables even when it's invalid
@ 2023-07-12 16:57 Alvaro Herrera <[email protected]>
0 siblings, 0 replies; 12+ messages in thread
From: Alvaro Herrera @ 2023-07-12 16:57 UTC (permalink / raw)
---
src/backend/utils/cache/relcache.c | 34 ++++++++++++++++++++++++------
1 file changed, 28 insertions(+), 6 deletions(-)
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 8e28335915..7c3bfde571 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -4789,19 +4789,41 @@ RelationGetIndexList(Relation relation)
result = lappend_oid(result, index->indexrelid);
/*
- * Invalid, non-unique, non-immediate or predicate indexes aren't
- * interesting for either oid indexes or replication identity indexes,
- * so don't check them.
+ * Non-unique, non-immediate or predicate indexes aren't interesting
+ * for either oid indexes or replication identity indexes, so don't
+ * check them.
*/
- if (!index->indisvalid || !index->indisunique ||
+ if (!index->indisunique ||
!index->indimmediate ||
!heap_attisnull(htup, Anum_pg_index_indpred, NULL))
continue;
- /* remember primary key index if any */
- if (index->indisprimary)
+ /*
+ * Remember primary key index, if any. We do this only if the index
+ * is valid; but if the table is partitioned, then we do it even if
+ * it's invalid.
+ *
+ * The reason for returning invalid primary keys for foreign tables is
+ * because of pg_dump of NOT NULL constraints, and the fact that PKs
+ * remain marked invalid until the partitions' PKs are attached to it.
+ * If we make rd_pkindex invalid, then the attnotnull flag is reset
+ * after the PK is created, which causes the ALTER INDEX ATTACH
+ * PARTITION to fail with 'column ... is not marked NOT NULL'. With
+ * this, dropconstraint_internal() will believe that the columns must
+ * not have attnotnull reset, so the PKs-on-partitions can be attached
+ * correctly, until finally the PK-on-parent is marked valid.
+ *
+ * Also, this doesn't harm anything, because rd_pkindex is not a
+ * "real" index anyway, but a RELKIND_PARTITIONED_INDEX.
+ */
+ if (index->indisprimary &&
+ (index->indisvalid ||
+ relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE))
pkeyIndex = index->indexrelid;
+ if (!index->indisvalid)
+ continue;
+
/* remember explicitly chosen replica index */
if (index->indisreplident)
candidateIndex = index->indexrelid;
--
2.39.2
--icqk4nrzalktuh5g
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
filename="v15-0002-Add-pg_constraint-rows-for-NOT-NULL-constraints.patch"
^ permalink raw reply [nested|flat] 12+ messages in thread
* [PATCH v3a] edit comments and stuff
@ 2026-01-05 14:26 Álvaro Herrera <[email protected]>
0 siblings, 0 replies; 12+ messages in thread
From: Álvaro Herrera @ 2026-01-05 14:26 UTC (permalink / raw)
---
src/backend/utils/sort/tuplesort.c | 2 +-
src/include/executor/instrument_node.h | 146 ++++++++++++-------------
src/include/utils/tuplesort.h | 15 ---
3 files changed, 73 insertions(+), 90 deletions(-)
diff --git a/src/backend/utils/sort/tuplesort.c b/src/backend/utils/sort/tuplesort.c
index 473d31188b8..9e4cd816137 100644
--- a/src/backend/utils/sort/tuplesort.c
+++ b/src/backend/utils/sort/tuplesort.c
@@ -200,7 +200,7 @@ struct Tuplesortstate
int64 maxSpace; /* maximum amount of space occupied among sort
* of groups, either in-memory or on-disk */
bool isMaxSpaceDisk; /* true when maxSpace is value for on-disk
- * space, false when its value for in-memory
+ * space, false when it's value for in-memory
* space */
TupSortStatus maxSpaceStatus; /* sort status when maxSpace was reached */
LogicalTapeSet *tapeset; /* logtape.c object for tapes in a temp file */
diff --git a/src/include/executor/instrument_node.h b/src/include/executor/instrument_node.h
index 75520008c36..49627eb4a27 100644
--- a/src/include/executor/instrument_node.h
+++ b/src/include/executor/instrument_node.h
@@ -1,8 +1,12 @@
/*-------------------------------------------------------------------------
*
* instrument_node.h
- * Definitions for node-specific instrumentation
+ * Definitions for node-specific support for parallel query instrumentation
*
+ * These structs purposely contain no pointers because they are copied
+ * across processes during parallel query execution. Each worker copies its
+ * individual information into the container struct at executor shutdown time,
+ * to allow the leader to display the information in EXPLAIN ANALYZE.
*
* Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
@@ -15,32 +19,30 @@
#define INSTRUMENT_NODE_H
-
/* ---------------------
- * per-worker aggregate information
+ * Instrumentation information for aggregate function execution
* ---------------------
*/
typedef struct AggregateInstrumentation
{
- Size hash_mem_peak; /* peak hash table memory usage */
- uint64 hash_disk_used; /*kB of disk space used */
- int hash_batches_used; /* batches used during entire execution */
+ Size hash_mem_peak; /* peak hash table memory usage */
+ uint64 hash_disk_used; /* kB of disk space used */
+ int hash_batches_used; /* batches used during entire execution */
} AggregateInstrumentation;
-/* ----------------
- * Shared memory container for per-worker aggregate information
- * ----------------
+/*
+ * Shared memory container for per-worker aggregate information
*/
typedef struct SharedAggInfo
{
- int num_workers;
+ int num_workers;
AggregateInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER];
} SharedAggInfo;
-/*
- * Struct for statistics maintained by amgettuple and amgetbitmap
- *
- * Note: IndexScanInstrumentation can't contain any pointers, since it is
- * copied into a SharedIndexScanInstrumentation during parallel scans
+
+
+/* ---------------------
+ * Instrumentation information for indexscans (amgettuple and amgetbitmap)
+ * ---------------------
*/
typedef struct IndexScanInstrumentation
{
@@ -49,7 +51,7 @@ typedef struct IndexScanInstrumentation
} IndexScanInstrumentation;
/*
- * Struct for every worker's IndexScanInstrumentation, stored in shared memory
+ * Shared memory container for per-worker information
*/
typedef struct SharedIndexScanInstrumentation
{
@@ -57,11 +59,13 @@ typedef struct SharedIndexScanInstrumentation
IndexScanInstrumentation winstrument[FLEXIBLE_ARRAY_MEMBER];
} SharedIndexScanInstrumentation;
-/*
- * BitmapHeapScanInstrumentation information
+
+/* ---------------------
+ * Instrumentation information for bitmap heap scans
*
* exact_pages total number of exact pages retrieved
* lossy_pages total number of lossy pages retrieved
+ * ---------------------
*/
typedef struct BitmapHeapScanInstrumentation
{
@@ -70,11 +74,7 @@ typedef struct BitmapHeapScanInstrumentation
} BitmapHeapScanInstrumentation;
/*
- * Instrumentation data for a parallel bitmap heap scan.
- *
- * A shared memory struct that each parallel worker copies its
- * BitmapHeapScanInstrumentation information into at executor shutdown to
- * allow the leader to display the information in EXPLAIN ANALYZE.
+ * Shared memory container for per-worker information
*/
typedef struct SharedBitmapHeapInstrumentation
{
@@ -83,25 +83,27 @@ typedef struct SharedBitmapHeapInstrumentation
} SharedBitmapHeapInstrumentation;
+/* ---------------------
+ * Instrumentation information for Memoize
+ * ---------------------
+ */
typedef struct MemoizeInstrumentation
{
- uint64 cache_hits; /* number of rescans where we've found the
- * scan parameters values to be cached */
- uint64 cache_misses; /* number of rescans where we've not found the
- * scan parameters values to be cached */
- uint64 cache_evictions; /* number of cache entries removed due to
- * the need to free memory */
- uint64 cache_overflows; /* number of times we've had to bypass the
- * cache when filling it due to not being
- * able to free enough space to store the
- * current scan's tuples */
- uint64 mem_peak; /* peak memory usage in bytes */
-
+ uint64 cache_hits; /* number of rescans where we've found the
+ * scan parameters values to be cached */
+ uint64 cache_misses; /* number of rescans where we've not found the
+ * scan parameters values to be cached */
+ uint64 cache_evictions; /* number of cache entries removed due to
+ * the need to free memory */
+ uint64 cache_overflows; /* number of times we've had to bypass the
+ * cache when filling it due to not being
+ * able to free enough space to store the
+ * current scan's tuples */
+ uint64 mem_peak; /* peak memory usage in bytes */
} MemoizeInstrumentation;
-/* ----------------
- * Shared memory container for per-worker memoize information
- * ----------------
+/*
+ * Shared memory container for per-worker memoize information
*/
typedef struct SharedMemoizeInfo
{
@@ -110,27 +112,25 @@ typedef struct SharedMemoizeInfo
} SharedMemoizeInfo;
-/*
- * Data structures for reporting sort statistics. Note that
- * TuplesortInstrumentation can't contain any pointers because we
- * sometimes put it in shared memory.
- *
- * The parallel-sort infrastructure relies on having a zero TuplesortMethod
- * to indicate that a worker never did anything, so we assign zero to
- * SORT_TYPE_STILL_IN_PROGRESS. The other values of this enum can be
- * OR'ed together to represent a situation where different workers used
- * different methods, so we need a separate bit for each one. Keep the
- * NUM_TUPLESORTMETHODS constant in sync with the number of bits!
+/* ---------------------
+ * Instrumentation information for Sorts.
+ * ---------------------
*/
-#define NUM_TUPLESORTMETHODS 4
-
typedef enum
{
SORT_SPACE_TYPE_DISK,
SORT_SPACE_TYPE_MEMORY,
} TuplesortSpaceType;
+/*
+ * The parallel-sort infrastructure relies on having a zero TuplesortMethod
+ * to indicate that a worker never did anything, so we assign zero to
+ * SORT_TYPE_STILL_IN_PROGRESS. The other values of this enum can be
+ * OR'ed together to represent a situation where different workers used
+ * different methods, so we need a separate bit for each one. Keep the
+ * NUM_TUPLESORTMETHODS constant in sync with the number of bits!
+ */
typedef enum
{
SORT_TYPE_STILL_IN_PROGRESS = 0,
@@ -139,40 +139,40 @@ typedef enum
SORT_TYPE_EXTERNAL_SORT = 1 << 2,
SORT_TYPE_EXTERNAL_MERGE = 1 << 3
} TuplesortMethod;
+#define NUM_TUPLESORTMETHODS 4
typedef struct TuplesortInstrumentation
{
- TuplesortMethod sortMethod; /* sort algorithm used */
+ TuplesortMethod sortMethod; /* sort algorithm used */
TuplesortSpaceType spaceType; /* type of space spaceUsed represents */
- int64 spaceUsed; /* space consumption, in kB */
+ int64 spaceUsed; /* space consumption, in kB */
} TuplesortInstrumentation;
-/* ----------------
- * Shared memory container for per-worker sort information
- * ----------------
+/*
+ * Shared memory container for per-worker sort information
*/
typedef struct SharedSortInfo
{
- int num_workers;
+ int num_workers;
TuplesortInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER];
} SharedSortInfo;
-/* ----------------
- * Values displayed by EXPLAIN ANALYZE
- * ----------------
+
+/* ---------------------
+ * Instrumentation information for nodeHash.c
+ * ---------------------
*/
typedef struct HashInstrumentation
{
- int nbuckets; /* number of buckets at end of execution */
- int nbuckets_original; /* planned number of buckets */
- int nbatch; /* number of batches at end of execution */
- int nbatch_original; /* planned number of batches */
- Size space_peak; /* peak memory usage in bytes */
+ int nbuckets; /* number of buckets at end of execution */
+ int nbuckets_original; /* planned number of buckets */
+ int nbatch; /* number of batches at end of execution */
+ int nbatch_original; /* planned number of batches */
+ Size space_peak; /* peak memory usage in bytes */
} HashInstrumentation;
-/* ----------------
- * Shared memory container for per-worker hash information
- * ----------------
+/*
+ * Shared memory container for per-worker information
*/
typedef struct SharedHashInfo
{
@@ -180,9 +180,10 @@ typedef struct SharedHashInfo
HashInstrumentation hinstrument[FLEXIBLE_ARRAY_MEMBER];
} SharedHashInfo;
-/* ----------------
+
+/* ---------------------
* Instrumentation information for IncrementalSort
- * ----------------
+ * ---------------------
*/
typedef struct IncrementalSortGroupInfo
{
@@ -200,10 +201,7 @@ typedef struct IncrementalSortInfo
IncrementalSortGroupInfo prefixsortGroupInfo;
} IncrementalSortInfo;
-/* ----------------
- * Shared memory container for per-worker incremental sort information
- * ----------------
- */
+/* Shared memory container for per-worker incremental sort information */
typedef struct SharedIncrementalSortInfo
{
int num_workers;
diff --git a/src/include/utils/tuplesort.h b/src/include/utils/tuplesort.h
index a7e867f36b8..943a2b7dc93 100644
--- a/src/include/utils/tuplesort.h
+++ b/src/include/utils/tuplesort.h
@@ -62,21 +62,6 @@ typedef struct SortCoordinateData
typedef struct SortCoordinateData *SortCoordinate;
-/*
- * Data structures for reporting sort statistics. Note that
- * TuplesortInstrumentation can't contain any pointers because we
- * sometimes put it in shared memory.
- *
- * The parallel-sort infrastructure relies on having a zero TuplesortMethod
- * to indicate that a worker never did anything, so we assign zero to
- * SORT_TYPE_STILL_IN_PROGRESS. The other values of this enum can be
- * OR'ed together to represent a situation where different workers used
- * different methods, so we need a separate bit for each one. Keep the
- * NUM_TUPLESORTMETHODS constant in sync with the number of bits!
- */
-
-#define NUM_TUPLESORTMETHODS 4
-
/* Bitwise option flags for tuple sorts */
#define TUPLESORT_NONE 0
--
2.47.3
--xs5il3t73pzvzpq7--
^ permalink raw reply [nested|flat] 12+ messages in thread
* [PATCH v3a] edit comments and stuff
@ 2026-01-05 14:26 Álvaro Herrera <[email protected]>
0 siblings, 0 replies; 12+ messages in thread
From: Álvaro Herrera @ 2026-01-05 14:26 UTC (permalink / raw)
---
src/backend/utils/sort/tuplesort.c | 2 +-
src/include/executor/instrument_node.h | 146 ++++++++++++-------------
src/include/utils/tuplesort.h | 15 ---
3 files changed, 73 insertions(+), 90 deletions(-)
diff --git a/src/backend/utils/sort/tuplesort.c b/src/backend/utils/sort/tuplesort.c
index 473d31188b8..9e4cd816137 100644
--- a/src/backend/utils/sort/tuplesort.c
+++ b/src/backend/utils/sort/tuplesort.c
@@ -200,7 +200,7 @@ struct Tuplesortstate
int64 maxSpace; /* maximum amount of space occupied among sort
* of groups, either in-memory or on-disk */
bool isMaxSpaceDisk; /* true when maxSpace is value for on-disk
- * space, false when its value for in-memory
+ * space, false when it's value for in-memory
* space */
TupSortStatus maxSpaceStatus; /* sort status when maxSpace was reached */
LogicalTapeSet *tapeset; /* logtape.c object for tapes in a temp file */
diff --git a/src/include/executor/instrument_node.h b/src/include/executor/instrument_node.h
index 75520008c36..49627eb4a27 100644
--- a/src/include/executor/instrument_node.h
+++ b/src/include/executor/instrument_node.h
@@ -1,8 +1,12 @@
/*-------------------------------------------------------------------------
*
* instrument_node.h
- * Definitions for node-specific instrumentation
+ * Definitions for node-specific support for parallel query instrumentation
*
+ * These structs purposely contain no pointers because they are copied
+ * across processes during parallel query execution. Each worker copies its
+ * individual information into the container struct at executor shutdown time,
+ * to allow the leader to display the information in EXPLAIN ANALYZE.
*
* Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
@@ -15,32 +19,30 @@
#define INSTRUMENT_NODE_H
-
/* ---------------------
- * per-worker aggregate information
+ * Instrumentation information for aggregate function execution
* ---------------------
*/
typedef struct AggregateInstrumentation
{
- Size hash_mem_peak; /* peak hash table memory usage */
- uint64 hash_disk_used; /*kB of disk space used */
- int hash_batches_used; /* batches used during entire execution */
+ Size hash_mem_peak; /* peak hash table memory usage */
+ uint64 hash_disk_used; /* kB of disk space used */
+ int hash_batches_used; /* batches used during entire execution */
} AggregateInstrumentation;
-/* ----------------
- * Shared memory container for per-worker aggregate information
- * ----------------
+/*
+ * Shared memory container for per-worker aggregate information
*/
typedef struct SharedAggInfo
{
- int num_workers;
+ int num_workers;
AggregateInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER];
} SharedAggInfo;
-/*
- * Struct for statistics maintained by amgettuple and amgetbitmap
- *
- * Note: IndexScanInstrumentation can't contain any pointers, since it is
- * copied into a SharedIndexScanInstrumentation during parallel scans
+
+
+/* ---------------------
+ * Instrumentation information for indexscans (amgettuple and amgetbitmap)
+ * ---------------------
*/
typedef struct IndexScanInstrumentation
{
@@ -49,7 +51,7 @@ typedef struct IndexScanInstrumentation
} IndexScanInstrumentation;
/*
- * Struct for every worker's IndexScanInstrumentation, stored in shared memory
+ * Shared memory container for per-worker information
*/
typedef struct SharedIndexScanInstrumentation
{
@@ -57,11 +59,13 @@ typedef struct SharedIndexScanInstrumentation
IndexScanInstrumentation winstrument[FLEXIBLE_ARRAY_MEMBER];
} SharedIndexScanInstrumentation;
-/*
- * BitmapHeapScanInstrumentation information
+
+/* ---------------------
+ * Instrumentation information for bitmap heap scans
*
* exact_pages total number of exact pages retrieved
* lossy_pages total number of lossy pages retrieved
+ * ---------------------
*/
typedef struct BitmapHeapScanInstrumentation
{
@@ -70,11 +74,7 @@ typedef struct BitmapHeapScanInstrumentation
} BitmapHeapScanInstrumentation;
/*
- * Instrumentation data for a parallel bitmap heap scan.
- *
- * A shared memory struct that each parallel worker copies its
- * BitmapHeapScanInstrumentation information into at executor shutdown to
- * allow the leader to display the information in EXPLAIN ANALYZE.
+ * Shared memory container for per-worker information
*/
typedef struct SharedBitmapHeapInstrumentation
{
@@ -83,25 +83,27 @@ typedef struct SharedBitmapHeapInstrumentation
} SharedBitmapHeapInstrumentation;
+/* ---------------------
+ * Instrumentation information for Memoize
+ * ---------------------
+ */
typedef struct MemoizeInstrumentation
{
- uint64 cache_hits; /* number of rescans where we've found the
- * scan parameters values to be cached */
- uint64 cache_misses; /* number of rescans where we've not found the
- * scan parameters values to be cached */
- uint64 cache_evictions; /* number of cache entries removed due to
- * the need to free memory */
- uint64 cache_overflows; /* number of times we've had to bypass the
- * cache when filling it due to not being
- * able to free enough space to store the
- * current scan's tuples */
- uint64 mem_peak; /* peak memory usage in bytes */
-
+ uint64 cache_hits; /* number of rescans where we've found the
+ * scan parameters values to be cached */
+ uint64 cache_misses; /* number of rescans where we've not found the
+ * scan parameters values to be cached */
+ uint64 cache_evictions; /* number of cache entries removed due to
+ * the need to free memory */
+ uint64 cache_overflows; /* number of times we've had to bypass the
+ * cache when filling it due to not being
+ * able to free enough space to store the
+ * current scan's tuples */
+ uint64 mem_peak; /* peak memory usage in bytes */
} MemoizeInstrumentation;
-/* ----------------
- * Shared memory container for per-worker memoize information
- * ----------------
+/*
+ * Shared memory container for per-worker memoize information
*/
typedef struct SharedMemoizeInfo
{
@@ -110,27 +112,25 @@ typedef struct SharedMemoizeInfo
} SharedMemoizeInfo;
-/*
- * Data structures for reporting sort statistics. Note that
- * TuplesortInstrumentation can't contain any pointers because we
- * sometimes put it in shared memory.
- *
- * The parallel-sort infrastructure relies on having a zero TuplesortMethod
- * to indicate that a worker never did anything, so we assign zero to
- * SORT_TYPE_STILL_IN_PROGRESS. The other values of this enum can be
- * OR'ed together to represent a situation where different workers used
- * different methods, so we need a separate bit for each one. Keep the
- * NUM_TUPLESORTMETHODS constant in sync with the number of bits!
+/* ---------------------
+ * Instrumentation information for Sorts.
+ * ---------------------
*/
-#define NUM_TUPLESORTMETHODS 4
-
typedef enum
{
SORT_SPACE_TYPE_DISK,
SORT_SPACE_TYPE_MEMORY,
} TuplesortSpaceType;
+/*
+ * The parallel-sort infrastructure relies on having a zero TuplesortMethod
+ * to indicate that a worker never did anything, so we assign zero to
+ * SORT_TYPE_STILL_IN_PROGRESS. The other values of this enum can be
+ * OR'ed together to represent a situation where different workers used
+ * different methods, so we need a separate bit for each one. Keep the
+ * NUM_TUPLESORTMETHODS constant in sync with the number of bits!
+ */
typedef enum
{
SORT_TYPE_STILL_IN_PROGRESS = 0,
@@ -139,40 +139,40 @@ typedef enum
SORT_TYPE_EXTERNAL_SORT = 1 << 2,
SORT_TYPE_EXTERNAL_MERGE = 1 << 3
} TuplesortMethod;
+#define NUM_TUPLESORTMETHODS 4
typedef struct TuplesortInstrumentation
{
- TuplesortMethod sortMethod; /* sort algorithm used */
+ TuplesortMethod sortMethod; /* sort algorithm used */
TuplesortSpaceType spaceType; /* type of space spaceUsed represents */
- int64 spaceUsed; /* space consumption, in kB */
+ int64 spaceUsed; /* space consumption, in kB */
} TuplesortInstrumentation;
-/* ----------------
- * Shared memory container for per-worker sort information
- * ----------------
+/*
+ * Shared memory container for per-worker sort information
*/
typedef struct SharedSortInfo
{
- int num_workers;
+ int num_workers;
TuplesortInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER];
} SharedSortInfo;
-/* ----------------
- * Values displayed by EXPLAIN ANALYZE
- * ----------------
+
+/* ---------------------
+ * Instrumentation information for nodeHash.c
+ * ---------------------
*/
typedef struct HashInstrumentation
{
- int nbuckets; /* number of buckets at end of execution */
- int nbuckets_original; /* planned number of buckets */
- int nbatch; /* number of batches at end of execution */
- int nbatch_original; /* planned number of batches */
- Size space_peak; /* peak memory usage in bytes */
+ int nbuckets; /* number of buckets at end of execution */
+ int nbuckets_original; /* planned number of buckets */
+ int nbatch; /* number of batches at end of execution */
+ int nbatch_original; /* planned number of batches */
+ Size space_peak; /* peak memory usage in bytes */
} HashInstrumentation;
-/* ----------------
- * Shared memory container for per-worker hash information
- * ----------------
+/*
+ * Shared memory container for per-worker information
*/
typedef struct SharedHashInfo
{
@@ -180,9 +180,10 @@ typedef struct SharedHashInfo
HashInstrumentation hinstrument[FLEXIBLE_ARRAY_MEMBER];
} SharedHashInfo;
-/* ----------------
+
+/* ---------------------
* Instrumentation information for IncrementalSort
- * ----------------
+ * ---------------------
*/
typedef struct IncrementalSortGroupInfo
{
@@ -200,10 +201,7 @@ typedef struct IncrementalSortInfo
IncrementalSortGroupInfo prefixsortGroupInfo;
} IncrementalSortInfo;
-/* ----------------
- * Shared memory container for per-worker incremental sort information
- * ----------------
- */
+/* Shared memory container for per-worker incremental sort information */
typedef struct SharedIncrementalSortInfo
{
int num_workers;
diff --git a/src/include/utils/tuplesort.h b/src/include/utils/tuplesort.h
index a7e867f36b8..943a2b7dc93 100644
--- a/src/include/utils/tuplesort.h
+++ b/src/include/utils/tuplesort.h
@@ -62,21 +62,6 @@ typedef struct SortCoordinateData
typedef struct SortCoordinateData *SortCoordinate;
-/*
- * Data structures for reporting sort statistics. Note that
- * TuplesortInstrumentation can't contain any pointers because we
- * sometimes put it in shared memory.
- *
- * The parallel-sort infrastructure relies on having a zero TuplesortMethod
- * to indicate that a worker never did anything, so we assign zero to
- * SORT_TYPE_STILL_IN_PROGRESS. The other values of this enum can be
- * OR'ed together to represent a situation where different workers used
- * different methods, so we need a separate bit for each one. Keep the
- * NUM_TUPLESORTMETHODS constant in sync with the number of bits!
- */
-
-#define NUM_TUPLESORTMETHODS 4
-
/* Bitwise option flags for tuple sorts */
#define TUPLESORT_NONE 0
--
2.47.3
--xs5il3t73pzvzpq7--
^ permalink raw reply [nested|flat] 12+ messages in thread
end of thread, other threads:[~2026-01-05 14:26 UTC | newest]
Thread overview: 12+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2019-05-21 00:02 [PATCH v5 07/12] consistent language: to which Justin Pryzby <[email protected]>
2023-02-24 01:07 Re: pgsql: Refactor to add pg_strcoll(), pg_strxfrm(), and variants. Justin Pryzby <[email protected]>
2023-07-12 16:57 [PATCH v17 1/3] Remember PK oid for partitioned tables even when it's invalid Alvaro Herrera <[email protected]>
2023-07-12 16:57 [PATCH v17 1/3] Remember PK oid for partitioned tables even when it's invalid Alvaro Herrera <[email protected]>
2023-07-12 16:57 [PATCH v13 1/2] Remember PK oid for partitioned tables even when it's invalid Alvaro Herrera <[email protected]>
2023-07-12 16:57 [PATCH v14 1/2] Remember PK oid for partitioned tables even when it's invalid Alvaro Herrera <[email protected]>
2023-07-12 16:57 [PATCH v17 1/3] Remember PK oid for partitioned tables even when it's invalid Alvaro Herrera <[email protected]>
2023-07-12 16:57 [PATCH v15 1/2] Remember PK oid for partitioned tables even when it's invalid Alvaro Herrera <[email protected]>
2023-07-12 16:57 [PATCH v16 1/3] Remember PK oid for partitioned tables even when it's invalid Alvaro Herrera <[email protected]>
2023-07-12 16:57 [PATCH v15 1/2] Remember PK oid for partitioned tables even when it's invalid Alvaro Herrera <[email protected]>
2026-01-05 14:26 [PATCH v3a] edit comments and stuff Álvaro Herrera <[email protected]>
2026-01-05 14:26 [PATCH v3a] edit comments and stuff Álvaro Herrera <[email protected]>
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox