<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.postgresql.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Andresfreund</id>
	<title>PostgreSQL wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.postgresql.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Andresfreund"/>
	<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/wiki/Special:Contributions/Andresfreund"/>
	<updated>2026-06-09T15:57:08Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42966</id>
		<title>User:Andresfreund/Desired Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42966"/>
		<updated>2026-03-06T16:02:58Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shows changes that I&#039;d like to see in postgres, but that I am not personally working on at this point. Please feel free to work on any of these.&lt;br /&gt;
&lt;br /&gt;
== Stats ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System View showing TCP statistics&lt;br /&gt;
| This would be useful to debug things like replication not keeping up, which is often caused by TCP settings. The statistics should show information as shown by the the [https://man7.org/linux/man-pages/man8/ss.8.html ss] utility. While ss provides the necessary information, it makes it too hard to combine the information with postgres information (like which connections are for replication etc).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System View showing OS memory usage&lt;br /&gt;
| Currently it is very hard to know from within postgres which process actually uses how much memory. We should use operating system stats to show that information on operating systems where we know how.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add information about the number of newly created WAL segments to log_checkpoints output&lt;br /&gt;
| While log_checkpoint output already includes information about added WAL segments, that information does not include WAL segments created by backends, making the number extremely misleading.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System view showing what is holding back the xmin horizon&lt;br /&gt;
| Today it takes a lot of knowledge to find all potential sources of holding back the xmin horizon. We should have a view showing all the sources of the horizon being held back.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Benchmarking ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| pgbench throttling with uniform distribution&lt;br /&gt;
| The current Poisson distribution that pgbench -R uses adds so much noise that it&#039;s basically impossible to see changes in server latency&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| pgbench setup steps as part of custom scripts&lt;br /&gt;
| currently it&#039;s not possible to have distribute a single pgbench script that supports initializing the workload and running the benchmark as a single file&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Introduce shared state for open relations&lt;br /&gt;
| This is an enabling feature for many things:&lt;br /&gt;
* AIO safe sync request queue (AIO needs to register dirty segments while in crit section)&lt;br /&gt;
* safe caching of relation sizes, instead of constantly doing fstats&lt;br /&gt;
* autovacuum partial trunctions without needing an AccessExclusiveLock (which causes query cancellations on standbys)&lt;br /&gt;
* a more efficient buffer mapping would use a radix tree per relation, which in turn requires a place to &amp;quot;hang off&amp;quot; the radix tree &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Ensure that shared memory is populated at server start&lt;br /&gt;
| Currently all shared memory is only actually allocated the first time memory is touched. That means that workloads have a prolonged warmup period until steady performance is reached.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add functionality to pre-allocate WAL segments&lt;br /&gt;
| Performance of postgres changes wildly depending on whether WAL files are newly created or recycled (with the latter being much better on non-COW filesystems). We should provide a function to pre-create WAL segments.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Functions for getting block number / offset from a TID&lt;br /&gt;
| I&#039;ve way too many times written a regex to get block numbers out of tids. We should just have SQL level accessors.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Lightweight memory contexts&lt;br /&gt;
| For things like relcache entries, it&#039;d be rather desirable to use fine-grained memory contexts, but using a full memory context would be rather heavyweight. We should create a new memory context type that does allocations using malloc() and tracks them in a linked list. That would obviously be a bit slower, but uses cases for it should never be heavy on allocations. We could also &amp;quot;promote&amp;quot; such contexts once the number of allocations increases.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Make MemoryContext code usable in frontend code&lt;br /&gt;
| Lots of frontend code would like to share code with backend code, including use of memory contexts. There are also complicated frontend binaries that could benefit from memory contexts.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Split PANIC log level into failures that should dump core and ones that don&#039;t&lt;br /&gt;
| Lots of reasons for PANIC do not benefit of a core file being generated. E.g. a PANIC due to ENOSPC during WAL file creation just makes the problem worse.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Allow startup process to report errors that do not trigger a postmaster crash-restart cycle&lt;br /&gt;
| There are errors detected by the startup process that will not be resolved by a crash-restart cycle, yet we react to them being thrown by doing a crash-restart cycle.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Show time for index insertions in EXPLAIN ANALYZE of DML&lt;br /&gt;
| Similar to how EXPLAIN ANALYZE shows the time for trigger invocations, it should have per-index instrumentation tracking how long the insertions into the different indexes take and how many buffer accesses were needed.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Support EXPLAIN COPY &lt;br /&gt;
| When bulk data loading it would be rather useful to see how long which trigger takes and how long index manipulations take (see prior TODO). When copying data out via COPY (query) TO ... it&#039;d be useful to see the query plan.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Title&lt;br /&gt;
| Desc&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42060</id>
		<title>User:Andresfreund/Desired Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42060"/>
		<updated>2025-10-24T10:24:05Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shows changes that I&#039;d like to see in postgres, but that I am not personally working on at this point. Please feel free to work on any of these.&lt;br /&gt;
&lt;br /&gt;
== Stats ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System View showing TCP statistics&lt;br /&gt;
| This would be useful to debug things like replication not keeping up, which is often caused by TCP settings. The statistics should show information as shown by the the [https://man7.org/linux/man-pages/man8/ss.8.html ss] utility. While ss provides the necessary information, it makes it too hard to combine the information with postgres information (like which connections are for replication etc).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System View showing OS memory usage&lt;br /&gt;
| Currently it is very hard to know from within postgres which process actually uses how much memory. We should use operating system stats to show that information on operating systems where we know how.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add information about the number of newly created WAL segments to log_checkpoints output&lt;br /&gt;
| While log_checkpoint output already includes information about added WAL segments, that information does not include WAL segments created by backends, making the number extremely misleading.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System view showing what is holding back the xmin horizon&lt;br /&gt;
| Today it takes a lot of knowledge to find all potential sources of holding back the xmin horizon. We should have a view showing all the sources of the horizon being held back.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Benchmarking ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| pgbench throttling with uniform distribution&lt;br /&gt;
| The current Poisson distribution that pgbench -R uses adds so much noise that it&#039;s basically impossible to see changes in server latency&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| pgbench setup steps as part of custom scripts&lt;br /&gt;
| currently it&#039;s not possible to have distribute a single pgbench script that supports initializing the workload and running the benchmark as a single file&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Introduce shared state for open relations&lt;br /&gt;
| This is an enabling feature for many things:&lt;br /&gt;
* AIO safe sync request queue (AIO needs to register dirty segments while in crit section)&lt;br /&gt;
* safe caching of relation sizes, instead of constantly doing fstats&lt;br /&gt;
* autovacuum partial trunctions without needing an AccessExclusiveLock (which causes query cancellations on standbys)&lt;br /&gt;
* a more efficient buffer mapping would use a radix tree per relation, which in turn requires a place to &amp;quot;hang off&amp;quot; the radix tree &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Ensure that shared memory is populated at server start&lt;br /&gt;
| Currently all shared memory is only actually allocated the first time memory is touched. That means that workloads have a prolonged warmup period until steady performance is reached.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add functionality to pre-allocate WAL segments&lt;br /&gt;
| Performance of postgres changes wildly depending on whether WAL files are newly created or recycled (with the latter being much better on non-COW filesystems). We should provide a function to pre-create WAL segments.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Functions for getting block number / offset from a TID&lt;br /&gt;
| I&#039;ve way too many times written a regex to get block numbers out of tids. We should just have SQL level accessors.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Lightweight memory contexts&lt;br /&gt;
| For things like relcache entries, it&#039;d be rather desirable to use fine-grained memory contexts, but using a full memory context would be rather heavyweight. We should create a new memory context type that does allocations using malloc() and tracks them in a linked list. That would obviously be a bit slower, but uses cases for it should never be heavy on allocations. We could also &amp;quot;promote&amp;quot; such contexts once the number of allocations increases.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Make MemoryContext code usable in frontend code&lt;br /&gt;
| Lots of frontend code would like to share code with backend code, including use of memory contexts. There are also complicated frontend binaries that could benefit from memory contexts.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Split PANIC log level into failures that should dump core and ones that don&#039;t&lt;br /&gt;
| Lots of reasons for PANIC do not benefit of a core file being generated. E.g. a PANIC due to ENOSPC during WAL file creation just makes the problem worse.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Allow startup process to report errors that do not trigger a postmaster crash-restart cycle&lt;br /&gt;
| There are errors detected by the startup process that will not be resolved by a crash-restart cycle, yet we react to them being thrown by doing a crash-restart cycle.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Title&lt;br /&gt;
| Desc&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42059</id>
		<title>User:Andresfreund/Desired Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42059"/>
		<updated>2025-10-24T10:14:33Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shows changes that I&#039;d like to see in postgres, but that I am not personally working on at this point. Please feel free to work on any of these.&lt;br /&gt;
&lt;br /&gt;
== Stats ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System View showing TCP statistics&lt;br /&gt;
| This would be useful to debug things like replication not keeping up, which is often caused by TCP settings. The statistics should show information as shown by the the [https://man7.org/linux/man-pages/man8/ss.8.html ss] utility. While ss provides the necessary information, it makes it too hard to combine the information with postgres information (like which connections are for replication etc).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System View showing OS memory usage&lt;br /&gt;
| Currently it is very hard to know from within postgres which process actually uses how much memory. We should use operating system stats to show that information on operating systems where we know how.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add information about the number of newly created WAL segments to log_checkpoints output&lt;br /&gt;
| While log_checkpoint output already includes information about added WAL segments, that information does not include WAL segments created by backends, making the number extremely misleading.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System view showing what is holding back the xmin horizon&lt;br /&gt;
| Today it takes a lot of knowledge to find all potential sources of holding back the xmin horizon. We should have a view showing all the sources of the horizon being held back.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Benchmarking ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| pgbench throttling with uniform distribution&lt;br /&gt;
| The current Poisson distribution that pgbench -R uses adds so much noise that it&#039;s basically impossible to see changes in server latency&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| pgbench setup steps as part of custom scripts&lt;br /&gt;
| currently it&#039;s not possible to have distribute a single pgbench script that supports initializing the workload and running the benchmark as a single file&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Introduce shared state for open relations&lt;br /&gt;
| This is an enabling feature for many things:&lt;br /&gt;
* AIO safe sync request queue (AIO needs to register dirty segments while in crit section)&lt;br /&gt;
* safe caching of relation sizes, instead of constantly doing fstats&lt;br /&gt;
* autovacuum partial trunctions without needing an AccessExclusiveLock (which causes query cancellations on standbys)&lt;br /&gt;
* a more efficient buffer mapping would use a radix tree per relation, which in turn requires a place to &amp;quot;hang off&amp;quot; the radix tree &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Ensure that shared memory is populated at server start&lt;br /&gt;
| Currently all shared memory is only actually allocated the first time memory is touched. That means that workloads have a prolonged warmup period until steady performance is reached.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add functionality to pre-allocate WAL segments&lt;br /&gt;
| Performance of postgres changes wildly depending on whether WAL files are newly created or recycled (with the latter being much better on non-COW filesystems). We should provide a function to pre-create WAL segments.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Functions for getting block number / offset from a TID&lt;br /&gt;
| I&#039;ve way too many times written a regex to get block numbers out of tids. We should just have SQL level accessors.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Lightweight memory contexts&lt;br /&gt;
| For things like relcache entries, it&#039;d be rather desirable to use fine-grained memory contexts, but using a full memory context would be rather heavyweight. We should create a new memory context type that does allocations using malloc() and tracks them in a linked list. That would obviously be a bit slower, but uses cases for it should never be heavy on allocations. We could also &amp;quot;promote&amp;quot; such contexts once the number of allocations increases.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Make MemoryContext code usable in frontend code&lt;br /&gt;
| Lots of frontend code would like to share code with backend code, including use of memory contexts. There are also complicated frontend binaries that could benefit from memory contexts.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Title&lt;br /&gt;
| Desc&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42058</id>
		<title>User:Andresfreund/Desired Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42058"/>
		<updated>2025-10-24T09:38:40Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shows changes that I&#039;d like to see in postgres, but that I am not personally working on at this point. Please feel free to work on any of these.&lt;br /&gt;
&lt;br /&gt;
== Stats ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System View showing TCP statistics&lt;br /&gt;
| This would be useful to debug things like replication not keeping up, which is often caused by TCP settings. The statistics should show information as shown by the the [https://man7.org/linux/man-pages/man8/ss.8.html ss] utility. While ss provides the necessary information, it makes it too hard to combine the information with postgres information (like which connections are for replication etc).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System View showing OS memory usage&lt;br /&gt;
| Currently it is very hard to know from within postgres which process actually uses how much memory. We should use operating system stats to show that information on operating systems where we know how.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add information about the number of newly created WAL segments to log_checkpoints output&lt;br /&gt;
| While log_checkpoint output already includes information about added WAL segments, that information does not include WAL segments created by backends, making the number extremely misleading.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System view showing what is holding back the xmin horizon&lt;br /&gt;
| Today it takes a lot of knowledge to find all potential sources of holding back the xmin horizon. We should have a view showing all the sources of the horizon being held back.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Benchmarking ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| pgbench throttling with uniform distribution&lt;br /&gt;
| The current Poisson distribution that pgbench -R uses adds so much noise that it&#039;s basically impossible to see changes in server latency&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| pgbench setup steps as part of custom scripts&lt;br /&gt;
| currently it&#039;s not possible to have distribute a single pgbench script that supports initializing the workload and running the benchmark as a single file&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Introduce shared state for open relations&lt;br /&gt;
| This is an enabling feature for many things:&lt;br /&gt;
* AIO safe sync request queue (AIO needs to register dirty segments while in crit section)&lt;br /&gt;
* safe caching of relation sizes, instead of constantly doing fstats&lt;br /&gt;
* autovacuum partial trunctions without needing an AccessExclusiveLock (which causes query cancellations on standbys)&lt;br /&gt;
* a more efficient buffer mapping would use a radix tree per relation, which in turn requires a place to &amp;quot;hang off&amp;quot; the radix tree &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Ensure that shared memory is populated at server start&lt;br /&gt;
| Currently all shared memory is only actually allocated the first time memory is touched. That means that workloads have a prolonged warmup period until steady performance is reached.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add functionality to pre-allocate WAL segments&lt;br /&gt;
| Performance of postgres changes wildly depending on whether WAL files are newly created or recycled (with the latter being much better on non-COW filesystems). We should provide a function to pre-create WAL segments.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Functions for getting block number / offset from a TID&lt;br /&gt;
| I&#039;ve way too many times written a regex to get block numbers out of tids. We should just have SQL level accessors.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Lightweight memory contexts&lt;br /&gt;
| For things like relcache entries, it&#039;d be rather desirable to use fine-grained memory contexts, but using a full memory context would be rather heavyweight. We should create a new memory context type that does allocations using malloc() and tracks them in a linked list. That would obviously be a bit slower, but uses cases for it should never be heavy on allocations. We could also &amp;quot;promote&amp;quot; such contexts once the number of allocations increases.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Title&lt;br /&gt;
| Desc&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42057</id>
		<title>User:Andresfreund/Desired Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42057"/>
		<updated>2025-10-24T09:28:50Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shows changes that I&#039;d like to see in postgres, but that I am not personally working on at this point. Please feel free to work on any of these.&lt;br /&gt;
&lt;br /&gt;
== Stats ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System View showing TCP statistics&lt;br /&gt;
| This would be useful to debug things like replication not keeping up, which is often caused by TCP settings. The statistics should show information as shown by the the [https://man7.org/linux/man-pages/man8/ss.8.html ss] utility. While ss provides the necessary information, it makes it too hard to combine the information with postgres information (like which connections are for replication etc).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System View showing OS memory usage&lt;br /&gt;
| Currently it is very hard to know from within postgres which process actually uses how much memory. We should use operating system stats to show that information on operating systems where we know how.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add information about the number of newly created WAL segments to log_checkpoints output&lt;br /&gt;
| While log_checkpoint output already includes information about added WAL segments, that information does not include WAL segments created by backends, making the number extremely misleading.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System view showing what is holding back the xmin horizon&lt;br /&gt;
| Today it takes a lot of knowledge to find all potential sources of holding back the xmin horizon. We should have a view showing all the sources of the horizon being held back.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Benchmarking ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| pgbench throttling with uniform distribution&lt;br /&gt;
| The current Poisson distribution that pgbench -R uses adds so much noise that it&#039;s basically impossible to see changes in server latency&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| pgbench setup steps as part of custom scripts&lt;br /&gt;
| currently it&#039;s not possible to have distribute a single pgbench script that supports initializing the workload and running the benchmark as a single file&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Introduce shared state for open relations&lt;br /&gt;
| This is an enabling feature for many things:&lt;br /&gt;
* AIO safe sync request queue (AIO needs to register dirty segments while in crit section)&lt;br /&gt;
* safe caching of relation sizes, instead of constantly doing fstats&lt;br /&gt;
* autovacuum partial trunctions without needing an AccessExclusiveLock (which causes query cancellations on standbys)&lt;br /&gt;
* a more efficient buffer mapping would use a radix tree per relation, which in turn requires a place to &amp;quot;hang off&amp;quot; the radix tree &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Ensure that shared memory is populated at server start&lt;br /&gt;
| Currently all shared memory is only actually allocated the first time memory is touched. That means that workloads have a prolonged warmup period until steady performance is reached.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add functionality to pre-allocate WAL segments&lt;br /&gt;
| Performance of postgres changes wildly depending on whether WAL files are newly created or recycled (with the latter being much better on non-COW filesystems). We should provide a function to pre-create WAL segments.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Functions for getting block number / offset from a TID&lt;br /&gt;
| I&#039;ve way too many times written a regex to get block numbers out of tids. We should just have SQL level accessors.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Title&lt;br /&gt;
| Desc&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42056</id>
		<title>User:Andresfreund/Desired Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42056"/>
		<updated>2025-10-24T09:24:57Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shows changes that I&#039;d like to see in postgres, but that I am not personally working on at this point. Please feel free to work on any of these.&lt;br /&gt;
&lt;br /&gt;
== Stats ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System View showing TCP statistics&lt;br /&gt;
| This would be useful to debug things like replication not keeping up, which is often caused by TCP settings. The statistics should show information as shown by the the [https://man7.org/linux/man-pages/man8/ss.8.html ss] utility. While ss provides the necessary information, it makes it too hard to combine the information with postgres information (like which connections are for replication etc).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System View showing OS memory usage&lt;br /&gt;
| Currently it is very hard to know from within postgres which process actually uses how much memory. We should use operating system stats to show that information on operating systems where we know how.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add information about the number of newly created WAL segments to log_checkpoints output&lt;br /&gt;
| While log_checkpoint output already includes information about added WAL segments, that information does not include WAL segments created by backends, making the number extremely misleading.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System view showing what is holding back the xmin horizon&lt;br /&gt;
| Today it takes a lot of knowledge to find all potential sources of holding back the xmin horizon. We should have a view showing all the sources of the horizon being held back.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Benchmarking ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| pgbench throttling with uniform distribution&lt;br /&gt;
| The current Poisson distribution that pgbench -R uses adds so much noise that it&#039;s basically impossible to see changes in server latency&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| pgbench setup steps as part of custom scripts&lt;br /&gt;
| currently it&#039;s not possible to have distribute a single pgbench script that supports initializing the workload and running the benchmark as a single file&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Introduce shared state for open relations&lt;br /&gt;
| This is an enabling feature for many things:&lt;br /&gt;
* AIO safe sync request queue (AIO needs to register dirty segments while in crit section)&lt;br /&gt;
* safe caching of relation sizes, instead of constantly doing fstats&lt;br /&gt;
* autovacuum partial trunctions without needing an AccessExclusiveLock (which causes query cancellations on standbys)&lt;br /&gt;
* a more efficient buffer mapping would use a radix tree per relation, which in turn requires a place to &amp;quot;hang off&amp;quot; the radix tree &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Ensure that shared memory is populated at server start&lt;br /&gt;
| Currently all shared memory is only actually allocated the first time memory is touched. That means that workloads have a prolonged warmup period until steady performance is reached.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add functionality to pre-allocate WAL segments&lt;br /&gt;
| Performance of postgres changes wildly depending on whether WAL files are newly created or recycled (with the latter being much better on non-COW filesystems). We should provide a function to pre-create WAL segments.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Title&lt;br /&gt;
| Desc&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42055</id>
		<title>User:Andresfreund/Desired Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42055"/>
		<updated>2025-10-24T09:23:54Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Stats ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System View showing TCP statistics&lt;br /&gt;
| This would be useful to debug things like replication not keeping up, which is often caused by TCP settings. The statistics should show information as shown by the the [https://man7.org/linux/man-pages/man8/ss.8.html ss] utility. While ss provides the necessary information, it makes it too hard to combine the information with postgres information (like which connections are for replication etc).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System View showing OS memory usage&lt;br /&gt;
| Currently it is very hard to know from within postgres which process actually uses how much memory. We should use operating system stats to show that information on operating systems where we know how.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add information about the number of newly created WAL segments to log_checkpoints output&lt;br /&gt;
| While log_checkpoint output already includes information about added WAL segments, that information does not include WAL segments created by backends, making the number extremely misleading.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System view showing what is holding back the xmin horizon&lt;br /&gt;
| Today it takes a lot of knowledge to find all potential sources of holding back the xmin horizon. We should have a view showing all the sources of the horizon being held back.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Benchmarking ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| pgbench throttling with uniform distribution&lt;br /&gt;
| The current Poisson distribution that pgbench -R uses adds so much noise that it&#039;s basically impossible to see changes in server latency&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| pgbench setup steps as part of custom scripts&lt;br /&gt;
| currently it&#039;s not possible to have distribute a single pgbench script that supports initializing the workload and running the benchmark as a single file&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Introduce shared state for open relations&lt;br /&gt;
| This is an enabling feature for many things:&lt;br /&gt;
* AIO safe sync request queue (AIO needs to register dirty segments while in crit section)&lt;br /&gt;
* safe caching of relation sizes, instead of constantly doing fstats&lt;br /&gt;
* autovacuum partial trunctions without needing an AccessExclusiveLock (which causes query cancellations on standbys)&lt;br /&gt;
* a more efficient buffer mapping would use a radix tree per relation, which in turn requires a place to &amp;quot;hang off&amp;quot; the radix tree &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Ensure that shared memory is populated at server start&lt;br /&gt;
| Currently all shared memory is only actually allocated the first time memory is touched. That means that workloads have a prolonged warmup period until steady performance is reached.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add functionality to pre-allocate WAL segments&lt;br /&gt;
| Performance of postgres changes wildly depending on whether WAL files are newly created or recycled (with the latter being much better on non-COW filesystems). We should provide a function to pre-create WAL segments.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Title&lt;br /&gt;
| Desc&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42054</id>
		<title>User:Andresfreund/Desired Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42054"/>
		<updated>2025-10-24T09:03:02Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Stats ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System View showing TCP statistics&lt;br /&gt;
| This would be useful to debug things like replication not keeping up, which is often caused by TCP settings. The statistics should show information as shown by the the [https://man7.org/linux/man-pages/man8/ss.8.html ss] utility. While ss provides the necessary information, it makes it too hard to combine the information with postgres information (like which connections are for replication etc).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System View showing OS memory usage&lt;br /&gt;
| Currently it is very hard to know from within postgres which process actually uses how much memory. We should use operating system stats to show that information on operating systems where we know how.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add information about the number of newly created WAL segments to log_checkpoints output&lt;br /&gt;
| While log_checkpoint output already includes information about added WAL segments, that information does not include WAL segments created by backends, making the number extremely misleading.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Benchmarking ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| pgbench throttling with uniform distribution&lt;br /&gt;
| The current Poisson distribution that pgbench -R uses adds so much noise that it&#039;s basically impossible to see changes in server latency&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| pgbench setup steps as part of custom scripts&lt;br /&gt;
| currently it&#039;s not possible to have distribute a single pgbench script that supports initializing the workload and running the benchmark as a single file&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Introduce shared state for open relations&lt;br /&gt;
| This is an enabling feature for many things:&lt;br /&gt;
* AIO safe sync request queue (AIO needs to register dirty segments while in crit section)&lt;br /&gt;
* safe caching of relation sizes, instead of constantly doing fstats&lt;br /&gt;
* autovacuum partial trunctions without needing an AccessExclusiveLock (which causes query cancellations on standbys)&lt;br /&gt;
* a more efficient buffer mapping would use a radix tree per relation, which in turn requires a place to &amp;quot;hang off&amp;quot; the radix tree &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Ensure that shared memory is populated at server start&lt;br /&gt;
| Currently all shared memory is only actually allocated the first time memory is touched. That means that workloads have a prolonged warmup period until steady performance is reached.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add functionality to pre-allocate WAL segments&lt;br /&gt;
| Performance of postgres changes wildly depending on whether WAL files are newly created or recycled (with the latter being much better on non-COW filesystems). We should provide a function to pre-create WAL segments.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Title&lt;br /&gt;
| Desc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Title&lt;br /&gt;
| Desc&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42053</id>
		<title>User:Andresfreund/Desired Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42053"/>
		<updated>2025-10-24T09:00:58Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TodoItem&lt;br /&gt;
| System View showing TCP statistics&lt;br /&gt;
| This would be useful to debug things like replication not keeping up, which is often caused by TCP settings. The statistics should show information as shown by the the [https://man7.org/linux/man-pages/man8/ss.8.html ss] utility. While ss provides the necessary information, it makes it too hard to combine the information with postgres information (like which connections are for replication etc).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System View showing OS memory usage&lt;br /&gt;
| Currently it is very hard to know from within postgres which process actually uses how much memory. We should use operating system stats to show that information on operating systems where we know how.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Introduce shared state for open relations&lt;br /&gt;
| This is an enabling feature for many things:&lt;br /&gt;
* AIO safe sync request queue (AIO needs to register dirty segments while in crit section)&lt;br /&gt;
* safe caching of relation sizes, instead of constantly doing fstats&lt;br /&gt;
* autovacuum partial trunctions without needing an AccessExclusiveLock (which causes query cancellations on standbys)&lt;br /&gt;
* a more efficient buffer mapping would use a radix tree per relation, which in turn requires a place to &amp;quot;hang off&amp;quot; the radix tree &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| pgbench throttling with uniform distribution&lt;br /&gt;
| The current Poisson distribution that pgbench -R uses adds so much noise that it&#039;s basically impossible to see changes in server latency&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| pgbench setup steps as part of custom scripts&lt;br /&gt;
| currently it&#039;s not possible to have distribute a single pgbench script that supports initializing the workload and running the benchmark as a single file&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Ensure that shared memory is populated at server start&lt;br /&gt;
| Currently all shared memory is only actually allocated the first time memory is touched. That means that workloads have a prolonged warmup period until steady performance is reached.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add functionality to pre-allocate WAL segments&lt;br /&gt;
| Performance of postgres changes wildly depending on whether WAL files are newly created or recycled (with the latter being much better on non-COW filesystems). We should provide a function to pre-create WAL segments.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add information about the number of newly created WAL segments to log_checkpoints output&lt;br /&gt;
| While log_checkpoint output already includes information about added WAL segments, that information does not include WAL segments created by backends, making the number extremely misleading.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Title&lt;br /&gt;
| Desc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Title&lt;br /&gt;
| Desc&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42052</id>
		<title>User:Andresfreund/Desired Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42052"/>
		<updated>2025-10-24T07:51:19Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TodoItem&lt;br /&gt;
| System View showing TCP statistics&lt;br /&gt;
| This would be useful to debug things like replication not keeping up, which is often caused by TCP settings. The statistics should show information as shown by the the [https://man7.org/linux/man-pages/man8/ss.8.html ss] utility. While ss provides the necessary information, it makes it too hard to combine the information with postgres information (like which connections are for replication etc).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| System View showing OS memory usage&lt;br /&gt;
| Currently it is very hard to know from within postgres which process actually uses how much memory. We should use operating system stats to show that information on operating systems where we know how.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Introduce shared state for open relations&lt;br /&gt;
| This is an enabling feature for many things:&lt;br /&gt;
* AIO safe sync request queue (AIO needs to register dirty segments while in crit section)&lt;br /&gt;
* safe caching of relation sizes, instead of constantly doing fstats&lt;br /&gt;
* autovacuum partial trunctions without needing an AccessExclusiveLock (which causes query cancellations on standbys)&lt;br /&gt;
* a more efficient buffer mapping would use a radix tree per relation, which in turn requires a place to &amp;quot;hang off&amp;quot; the radix tree &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Title&lt;br /&gt;
| Desc&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=User:Andresfreund&amp;diff=42051</id>
		<title>User:Andresfreund</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=User:Andresfreund&amp;diff=42051"/>
		<updated>2025-10-24T07:45:39Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of changes to postgres that I&#039;d like to see, but am not currently working on: [[User:Andresfreund/Desired Changes| Andres&#039; desired changes]]&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42050</id>
		<title>User:Andresfreund/Desired Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=User:Andresfreund/Desired_Changes&amp;diff=42050"/>
		<updated>2025-10-24T07:42:51Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: Created page with &amp;quot;{{TodoItem |System View showing TCP statistics| This would be useful to debug things like replication not keeping up, which is often caused by TCP settings. The statistics should show information as shown by the the [https://man7.org/linux/man-pages/man8/ss.8.html ss] utility }}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TodoItem&lt;br /&gt;
|System View showing TCP statistics| This would be useful to debug things like replication not keeping up, which is often caused by TCP settings. The statistics should show information as shown by the the [https://man7.org/linux/man-pages/man8/ss.8.html ss] utility&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=User:Andresfreund&amp;diff=42049</id>
		<title>User:Andresfreund</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=User:Andresfreund&amp;diff=42049"/>
		<updated>2025-10-24T07:39:26Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: Created page with &amp;quot;List of changes to postgres that I&amp;#039;d like to see, but am not currently working on:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of changes to postgres that I&#039;d like to see, but am not currently working on:&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=AIO&amp;diff=41509</id>
		<title>AIO</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=AIO&amp;diff=41509"/>
		<updated>2025-07-28T20:20:25Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Effort to add asynchronous I/O, vectored/multiblock I/O and optional direct I/O to PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
= High-level state =&lt;br /&gt;
&lt;br /&gt;
* Core AIO infrastructure merged, using workers and io_uring&lt;br /&gt;
* Buffer manager infrastructure for asynchronous reads has been merged &lt;br /&gt;
* Read streams use AIO for readahead, various places have been converted to use AIO (See [[#Users_of_read_streams|read stream users]])&lt;br /&gt;
* Direct I/O can be enabled via the debug_io_direct=data GUC, but will be very slow for many workloads (See [[#Sub-Projects_required_for_.22minimal_real-world_use_of_DIO.22|DIO reqs]])&lt;br /&gt;
&lt;br /&gt;
= Sub-Projects required for &amp;quot;minimal real-world use of DIO&amp;quot; =&lt;br /&gt;
&lt;br /&gt;
* readahead of the table fetches for ordered index scans - without that common queries will be slower by orders of magnitude&lt;br /&gt;
* Asynchronous writes for checkpointer / bgwriter and COPY&lt;br /&gt;
* Some additional read streams might be required (e.g. ALTER TABLE SET TABLESPACE)&lt;br /&gt;
&lt;br /&gt;
= Streamification projects =&lt;br /&gt;
&lt;br /&gt;
In order to benefit from asynchronous I/O and vectored/multiblock I/O, we need to find all the places that pin buffers in a predictable way and teach them to do so via a stream.  Switching to the streaming API insulates them from future improvements.  For now, streamifying gets you vectored/multiblock I/O and systematic POSIX_FADV_WILLNEED hints only, but later true asynchronous modes will be proposed for the underlying infrastructure.&lt;br /&gt;
&lt;br /&gt;
== Users of read streams ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/postgres/postgres/commit/b7b0f3f27241e424b7103397489464d907cef2c4 Use streaming I/O in sequential scans.] -- committed in v17&lt;br /&gt;
* [https://github.com/postgres/postgres/commit/041b96802efa33d2bc9456f2ad946976b92b5ae1 Use streaming I/O in ANALYZE.] -- committed in 17&lt;br /&gt;
* [https://github.com/postgres/postgres/commit/3a352df05e65de740b4a375a0ecbcae97a1f6196 Use streaming I/O in pg_prewarm.] -- committed in 17&lt;br /&gt;
* [https://commitfest.postgresql.org/48/5089/ Use streaming I/O in VACUUM] -- work in progress&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4874/ Use streaming I/O in bitmap heap scans] -- work in progress&lt;br /&gt;
* btree [https://www.postgresql.org/message-id/flat/cf85f46f-b02f-05b2-5248-5000b894ebab%40enterprisedb.com related thread] -- todo&lt;br /&gt;
* brin -- todo&lt;br /&gt;
* gist -- todo&lt;br /&gt;
* gin -- todo&lt;br /&gt;
* CREATE DATABASE STRATEGY=WAL_LOG&lt;br /&gt;
* recovery -- todo&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Users of write streams ==&lt;br /&gt;
&lt;br /&gt;
There are not as many places that write data out.&lt;br /&gt;
&lt;br /&gt;
* CHECKPOINT -- work in progress&lt;br /&gt;
* CREATE INDEX (buffer pool bypass, extending/replacing the bulk_write.c facility) -- work in progress&lt;br /&gt;
* VACUUM writeback -- work in progress&lt;br /&gt;
* COPY writeback -- work in progress&lt;br /&gt;
* eviction writeback -- work in progress&lt;br /&gt;
&lt;br /&gt;
= Infrastructure changes =&lt;br /&gt;
&lt;br /&gt;
== Sub-Projects for AIO writes ==&lt;br /&gt;
&lt;br /&gt;
* bufmgr.c infrastructure to race-free acquire exclusive lock on buffer when IO might be in progress&lt;br /&gt;
* sync.c requests cannot correctly be made in critical section, but that&#039;s required for buffered writes&lt;br /&gt;
* Don&#039;t dirty pages while IO is ongoing (i.e. don&#039;t write hint bits while IO is ongoing)&lt;br /&gt;
&lt;br /&gt;
== Read stream API ==&lt;br /&gt;
&lt;br /&gt;
* basic buffered read stream, single relation + fork -- committed in 17&lt;br /&gt;
* multi-relation read stream -- todo&lt;br /&gt;
: Needed for recovery, but also useful for CREATE DATABASE ... STRATEGY=WAL_LOG.&lt;br /&gt;
&lt;br /&gt;
== Write stream API ==&lt;br /&gt;
&lt;br /&gt;
* basic buffered write stream -- todo&lt;br /&gt;
* driving sync_file_range -- todo&lt;br /&gt;
* driving WAL write frequency -- todo&lt;br /&gt;
* buffer pool bypass, needed for CREATE INDEX (bulk writes) -- todo&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* partition_prune failing in CI due to compiler bug in specific MSVC release&lt;br /&gt;
** [https://www.postgresql.org/message-id/CAApHDvof3AEVFZTT3MArh4Tq1cAuCJb_wk8u7FV5KMzJNhU4GQ%40mail.gmail.com discussion on -hackers]&lt;br /&gt;
** [https://github.com/cirruslabs/docker-images-windows/issues/23 ticket to update compiler on CI] &lt;br /&gt;
** drop commit &amp;quot;XXX Add temporary workaround for partition_prune test on Windows&amp;quot;&lt;br /&gt;
* how should flush_range op be implemented on non-Linux?&lt;br /&gt;
* write documentation, per-OS information&lt;br /&gt;
* can we cut down on the number of places where we do non-blocking drain, for the benefit of implementations where that might be a system call?&lt;br /&gt;
* replication is slow with wal_sync_method=open_datasync, because we don&#039;t call WalSndWakeupRequest(); this explains why eg the subscription tests are super slow on macOS on CI (macOS defaults to open_datasync)&lt;br /&gt;
&lt;br /&gt;
== Larger Issues ==&lt;br /&gt;
&lt;br /&gt;
* Streaming read / write interface are &amp;quot;too local&amp;quot; to specific users. A bit more backend global awareness would likely be a good idea&lt;br /&gt;
* currently PostgreSQL does some prefetching with posix_fadvise_WILLNEED which is not asynchronous. See [[Readahead]].&lt;br /&gt;
&lt;br /&gt;
== io_method=worker ==&lt;br /&gt;
&lt;br /&gt;
* self-adjusting IO worker pool?&lt;br /&gt;
* more work on the spurious-wakeup vs latency tradeoff&lt;br /&gt;
&lt;br /&gt;
== io_method=posix_aio ==&lt;br /&gt;
&lt;br /&gt;
* add an &amp;quot;interruptible&amp;quot; field in shmem that can be used to avoid useless wakeups while the submitter is running synchronous IOs or already draining, with some double-checked flags to avoid races?&lt;br /&gt;
* detect presence of POSIX AIO automatically so you don&#039;t have to build --with-posix-aio&lt;br /&gt;
** would be good to pass smoke tests on all known POSIX AIO implementations before we do that; results so far:&lt;br /&gt;
*** Successes!&lt;br /&gt;
**** FreeBSD&lt;br /&gt;
**** Linux with Glibc and Musl&lt;br /&gt;
**** illumos and Solaris&lt;br /&gt;
**** macOS&lt;br /&gt;
***** need to bump up sysctl limits to get decent performance&lt;br /&gt;
**** AIX&lt;br /&gt;
***** needs shared_memory_type=sysv&lt;br /&gt;
***** aio_nwait() would be a better wait/reap interface than aio_suspend(), but sadly it can&#039;t wait for aio_fsync()&lt;br /&gt;
****** possible workaround: could use aio_nwait() whenever there are no aio_fsync calls outstanding&lt;br /&gt;
*** Failures, that will probably need to be excluded by default in early versions:&lt;br /&gt;
**** NetBSD 9 seems to spin eating 100% CPU in lio_listio() :-(&lt;br /&gt;
***** clue: an earlier iteration of this code was able to pass tests on NetBSD, when we were using aio_read(), aio_write() instead of lio_listio(), and when we were using SIGEV_SIGNAL instead of SIGEV_NONE&lt;br /&gt;
***** no bug report filed yet, but a NetBSD developer advised me not to try to use this, it&#039;s not ready&lt;br /&gt;
** if keeping it as a configure option, it should be &amp;quot;enable/disable&amp;quot;, not &amp;quot;with/without&amp;quot;&lt;br /&gt;
* fixed&lt;br /&gt;
** [https://cirrus-ci.com/task/6024059377942528?logs=cores#L7 crash because aio_suspend() sees EINVAL], because &amp;quot;activate&amp;quot; LIO IOCB too soon, [https://github.com/anarazel/postgres/commit/b174a85c446d4190cc89847760427a031711d2a1 commit (fixup to be squashed)]&lt;br /&gt;
** DONE: can we avoid waiting for a merge head from a later generation? yes&lt;br /&gt;
** DONE: can we avoid using atomics in a signal handler?  most uses removed but in flight count remains; could do somethign about this&lt;br /&gt;
** DONE: the naming and coding in the baton stuff is weird, needs a rethink -&amp;gt; done, now called &amp;quot;exchange&amp;quot; and shared with iocp&lt;br /&gt;
** DONE: kill the array of active IOs if not using aio_suspend (eg FreeBSD)&lt;br /&gt;
** DONE: would it be better to have the signal handler give up after a short time so it can get back to doing something useful, and the waiter wake it again after a bit? -&amp;gt; seems to be better, but may need some defences against thundering herds and useless wakeups&lt;br /&gt;
&lt;br /&gt;
== io_method=iocp ==&lt;br /&gt;
&lt;br /&gt;
* Acceptance criteria for moving iocp into the main aio branch (from aio-win32):&lt;br /&gt;
** &amp;quot;TRAP: FailedAssertion(&amp;quot;pgwin32_signal_event != NULL&amp;quot;, File: &amp;quot;C:\Users\ContainerAdministrator\AppData\Local\Temp\cirrus-ci-build\src\port\open.c&amp;quot;, Line: 78, PID: 3416)&amp;quot;&lt;br /&gt;
*** pgwin32_open() currently hacked to comment that out because of unresolved ordering problem, read_nondefault_variables() vs pgwin32_signal_initialize()&lt;br /&gt;
** currently pgaio_can_scatter_gather() considers only io_data_direct when deciding; but it applies also to WAL I/O (and potentially, in future, who knows, temporary files etc)&lt;br /&gt;
*** this matters primarily for Windows because Windows has a different answer depending on use of direct I/O, but we have at least 3 different GUCs to control that on diffrent subsystems&lt;br /&gt;
*** one idea would be for pgaio_can_scatter_gather() to take an IO and check the &amp;quot;scb&amp;quot; to see who is asking, or something like that...&lt;br /&gt;
*** another idea is to carry a &amp;quot;direct&amp;quot; flag on every IO so that the merge code doesn&#039;t have to concern itself with the details beyond that&lt;br /&gt;
** new API: pgaio_impl-&amp;gt;opening_fd(int fd, int flags) so that Windows impl can register fd with IOCP if flags &amp;amp; O_OVERLAPPED?  currently that&#039;s all a bit kludgy&lt;br /&gt;
* other things&lt;br /&gt;
** using GetQueuedCompletionEventEx() requires Windows Vista, but PostgreSQL currently targets XP+.  both are long dead, but the case for bumping it needs to be made in the community  &lt;br /&gt;
** does FileFlushBuffers() have an async cousin?  doesn&#039;t look like it&lt;br /&gt;
*** but there is an equivalen to fdatasync() in ntdll.dll; might be worth looking further&lt;br /&gt;
** pgaio_iocp_closing_fd() should drain only IOs on the given fd, not all IOs issued by this backend&lt;br /&gt;
*** compare see pgaio_posix_aio_closing_fd() -- it only drains results, it does not reap, to avoid deadlock risk!   need something like that here too&lt;br /&gt;
&lt;br /&gt;
* fixed &lt;br /&gt;
** DONE: calling it &amp;quot;iocp&amp;quot; for now (&amp;quot;windows&amp;quot; was too generic; we want to reserve the option to use the new Windows io_uring knockoff API which will probably be a separate method)&lt;br /&gt;
** DONE: kill the IOCP thread, and teach pgaio_windows_drain() to drain?&lt;br /&gt;
** DONE: solve the resulting deadlock by using the same procsignal trick as posix_aio?&lt;br /&gt;
** DONE: we should use GetQueuedCompletionEventEx() to consume multiple completions in one call, instead of a loop!&lt;br /&gt;
&lt;br /&gt;
== io_method=ioring ==&lt;br /&gt;
&lt;br /&gt;
* no code yet, just an idea&lt;br /&gt;
* ioring (note: no &#039;u&#039;, maybe should be win_ioring or some other name) is a hypothetical future IO method that would use [https://windows-internals.com/i-o-rings-when-one-i-o-operation-is-not-enough/ Windows I/O rings], a knock-off of Linux io_uring that is available in Window 11 preview but still changing&lt;br /&gt;
* so far the documentation only describes how to do reads but [https://twitter.com/axboe/status/1435614103314128897 we know that you can already do writes and flushes with the current preview], so there is enough there right now to write aio_ioring.c and hook it up&lt;br /&gt;
* the easiest way could be to have one ioring per backend and use aio_exchange.c to deal with cross-process problems (like io_method=posix_aio and io_method=iocp), but it may also be possible to have N iorings that are somehow shared between processes and then use the context system for interlocking (like io_method=io_uring, the Linux one); can you do that, somehow share the handle + memory mapping for the s and c queues + correct wakeups?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Quick start for PostgreSQL hackers/reviewers =&lt;br /&gt;
&lt;br /&gt;
* Testing the default mode, simulated AIO using io_method=worker (= the default setting)&lt;br /&gt;
** Try strace-ing the backend and IO worker processes to see how I/O syscalls are offloaded&lt;br /&gt;
** Adjust the number of io_worker processes with io_workers=N&lt;br /&gt;
** See the view pg_stat_aios that shows individual IOs&lt;br /&gt;
** See the view pg_stat_aio_backends that shows per-backend info&lt;br /&gt;
* Testing the use of direct I/O instead of PostgreSQL&#039;s traditional double buffering&lt;br /&gt;
** Set io_direct=data to disable OS buffering of relation data&lt;br /&gt;
** Set io_direct=wal to disable OS buffering WAL data&lt;br /&gt;
** Set io_direct=wal,wal_init,data to disable all&lt;br /&gt;
* Testing OS-specific options for &amp;quot;native&amp;quot; AIO&lt;br /&gt;
** Linux io_uring&lt;br /&gt;
*** install package liburing-dev (or liburing-devel on some distros)&lt;br /&gt;
*** configure with --with-liburing (or if using Meson, it should find it by itself?)&lt;br /&gt;
*** run with io_method=io_uring&lt;br /&gt;
** POSIX AIO, on macOS, FreeBSD, NetBSD, AIX, illumos, Solaris, Linux&lt;br /&gt;
*** configure --with-posix-aio&lt;br /&gt;
*** run with io_method=posix_aio&lt;br /&gt;
*** Some OS specific notes:&lt;br /&gt;
**** Linux POSIX AIO is fake, simulated by glibc and musl with threads, and works well enough for testing but wouldn&#039;t be a good choice to actually use&lt;br /&gt;
**** Solaris/illumos also has fake POSIX AIO (there is a more native/kernel supported AIO API but we don&#039;t support that)&lt;br /&gt;
**** macOS has very tight limits on AIO; like every other application that uses AIO we&#039;re going to have to publish recommentations to crank them up ([http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc39123_1254/html/qinstmac/qinstmac11.htm Sybase for example], VirtualBox is another); on the bright side, macOS defaults provide a nice workout for the IO retry code paths; that is, often we try to start an IO and the kernel says EAGAIN, so we way for one IO to complete and then try again, and you can see this in the pg_stat_aio_backends retry counter column&lt;br /&gt;
**** AIX only works if you set shared_memory_type=sysv because AIX&#039;s AIO can&#039;t access memory we allocate with mmap() (otherwise all IO fails with EFAULT)&lt;br /&gt;
**** AIX direct I/O might be unnecessarily serializing per-file, which we could fix with O_CONCURRENT, O_CIO or O_CIOR&lt;br /&gt;
**** HPUX probably also needs O_CIO to avoid serializing direct IO (native AIO not working there yet but this applies to worker mode too)&lt;br /&gt;
** Windows IOCP&lt;br /&gt;
*** run with io_method=iocp&lt;br /&gt;
*** (not yet pushed to main aio branch, find it in the aio-win32 branch until it&#039;s a little more complete...)&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=AIO&amp;diff=41508</id>
		<title>AIO</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=AIO&amp;diff=41508"/>
		<updated>2025-07-28T18:30:50Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: /* Sub-Projects required for &amp;quot;minimal real-world use of DIO&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Effort to add asynchronous I/O, vectored/multiblock I/O and optional direct I/O to PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
= High-level state =&lt;br /&gt;
&lt;br /&gt;
* Core AIO infrastructure merged, using workers and io_uring&lt;br /&gt;
* Buffer manager infrastructure for asynchronous reads has been merged &lt;br /&gt;
* Read streams use AIO for readahead, various places have been converted to use AIO [[#Users_of_read_streams]]&lt;br /&gt;
* Direct I/O can be enabled via the debug_io_direct=data GUC, but will be very slow for many workloads [[#Sub-Projects_required_for_.22minimal_real-world_use_of_DIO.22]]&lt;br /&gt;
&lt;br /&gt;
= Sub-Projects required for &amp;quot;minimal real-world use of DIO&amp;quot; =&lt;br /&gt;
&lt;br /&gt;
* readahead of the table fetches for ordered index scans - without that common queries will be slower by orders of magnitude&lt;br /&gt;
* Asynchronous writes for checkpointer / bgwriter and COPY&lt;br /&gt;
* Some additional read streams might be required (e.g. ALTER TABLE SET TABLESPACE)&lt;br /&gt;
&lt;br /&gt;
= Sub-Projects for AIO writes = &lt;br /&gt;
&lt;br /&gt;
* bufmgr.c infrastructure to race-free acquire exclusive lock on buffer when IO might be in progress&lt;br /&gt;
* sync.c requests cannot correctly be made in critical section, but that&#039;s required for buffered writes&lt;br /&gt;
* Don&#039;t dirty pages while IO is ongoing (i.e. don&#039;t write hint bits while IO is ongoing)&lt;br /&gt;
&lt;br /&gt;
= Streamification projects =&lt;br /&gt;
&lt;br /&gt;
In order to benefit from asynchronous I/O and vectored/multiblock I/O, we need to find all the places that pin buffers in a predictable way and teach them to do so via a stream.  Switching to the streaming API insulates them from future improvements.  For now, streamifying gets you vectored/multiblock I/O and systematic POSIX_FADV_WILLNEED hints only, but later true asynchronous modes will be proposed for the underlying infrastructure.&lt;br /&gt;
&lt;br /&gt;
== Users of read streams ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/postgres/postgres/commit/b7b0f3f27241e424b7103397489464d907cef2c4 Use streaming I/O in sequential scans.] -- committed in v17&lt;br /&gt;
* [https://github.com/postgres/postgres/commit/041b96802efa33d2bc9456f2ad946976b92b5ae1 Use streaming I/O in ANALYZE.] -- committed in 17&lt;br /&gt;
* [https://github.com/postgres/postgres/commit/3a352df05e65de740b4a375a0ecbcae97a1f6196 Use streaming I/O in pg_prewarm.] -- committed in 17&lt;br /&gt;
* [https://commitfest.postgresql.org/48/5089/ Use streaming I/O in VACUUM] -- work in progress&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4874/ Use streaming I/O in bitmap heap scans] -- work in progress&lt;br /&gt;
* btree [https://www.postgresql.org/message-id/flat/cf85f46f-b02f-05b2-5248-5000b894ebab%40enterprisedb.com related thread] -- todo&lt;br /&gt;
* brin -- todo&lt;br /&gt;
* gist -- todo&lt;br /&gt;
* gin -- todo&lt;br /&gt;
* CREATE DATABASE STRATEGY=WAL_LOG&lt;br /&gt;
* recovery -- todo&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Users of write streams ==&lt;br /&gt;
&lt;br /&gt;
There are not as many places that write data out.&lt;br /&gt;
&lt;br /&gt;
* CHECKPOINT -- work in progress&lt;br /&gt;
* CREATE INDEX (buffer pool bypass, extending/replacing the bulk_write.c facility) -- work in progress&lt;br /&gt;
* VACUUM writeback -- work in progress&lt;br /&gt;
* COPY writeback -- work in progress&lt;br /&gt;
* eviction writeback -- work in progress&lt;br /&gt;
&lt;br /&gt;
= Infrastructure changes =&lt;br /&gt;
&lt;br /&gt;
== Read stream API ==&lt;br /&gt;
&lt;br /&gt;
* basic buffered read stream, single relation + fork -- committed in 17&lt;br /&gt;
* multi-relation read stream -- todo&lt;br /&gt;
: Needed for recovery, but also useful for CREATE DATABASE ... STRATEGY=WAL_LOG.&lt;br /&gt;
&lt;br /&gt;
== Write stream API ==&lt;br /&gt;
&lt;br /&gt;
* basic buffered write stream -- todo&lt;br /&gt;
* driving sync_file_range -- todo&lt;br /&gt;
* driving WAL write frequency -- todo&lt;br /&gt;
* buffer pool bypass, needed for CREATE INDEX (bulk writes) -- todo&lt;br /&gt;
&lt;br /&gt;
== Committed ==&lt;br /&gt;
&lt;br /&gt;
* [https://commitfest.postgresql.org/33/3147/ O_DIRECT on macOS]&lt;br /&gt;
** So that Mac hackers can test io_data_direct=on (worker mode or posix_aio mode)&lt;br /&gt;
* [https://commitfest.postgresql.org/31/2885/ pg_pwritev() and pg_preadv()]&lt;br /&gt;
** Portable support for synchronous scatter/gather I/O&lt;br /&gt;
* [https://commitfest.postgresql.org/32/3008/ Replace buffer I/O locks with condition variables]&lt;br /&gt;
** So that backends other that the one that drains an I/O from the kernel can wait for it to complete&lt;br /&gt;
* [https://commitfest.postgresql.org/41/3999/ Aligned memory allocation]&lt;br /&gt;
** As required for buffers used in direct I/O&lt;br /&gt;
* [https://commitfest.postgresql.org/42/3996/ Direct I/O GUC]&lt;br /&gt;
** Released in 16 as debug_io_direct, to avoid attracting too much attention&lt;br /&gt;
* [https://commitfest.postgresql.org/34/2962/ Fix DROP TABLESPACE on Windows with ProcSignalBarrier]&lt;br /&gt;
** This is actually an ancient bug in PostgreSQL on Windows, but it was a bit harder to hit; make check fails every time under io_method=worker because processes hang around holding cached fds.&lt;br /&gt;
* [https://commitfest.postgresql.org/42/3993/ Refactor relation extension]&lt;br /&gt;
** This includes work to allow a backend to have multiple buffers in BM_IO_IN_PROGRESS state.&lt;br /&gt;
* [https://commitfest.postgresql.org/44/4532/ Streaming I/O, vectored I/O]&lt;br /&gt;
** Introduce the concept of streams of buffers, initially for more efficient synchronous I/O&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* partition_prune failing in CI due to compiler bug in specific MSVC release&lt;br /&gt;
** [https://www.postgresql.org/message-id/CAApHDvof3AEVFZTT3MArh4Tq1cAuCJb_wk8u7FV5KMzJNhU4GQ%40mail.gmail.com discussion on -hackers]&lt;br /&gt;
** [https://github.com/cirruslabs/docker-images-windows/issues/23 ticket to update compiler on CI] &lt;br /&gt;
** drop commit &amp;quot;XXX Add temporary workaround for partition_prune test on Windows&amp;quot;&lt;br /&gt;
* how should flush_range op be implemented on non-Linux?&lt;br /&gt;
* write documentation, per-OS information&lt;br /&gt;
* can we cut down on the number of places where we do non-blocking drain, for the benefit of implementations where that might be a system call?&lt;br /&gt;
* replication is slow with wal_sync_method=open_datasync, because we don&#039;t call WalSndWakeupRequest(); this explains why eg the subscription tests are super slow on macOS on CI (macOS defaults to open_datasync)&lt;br /&gt;
&lt;br /&gt;
== Larger Issues ==&lt;br /&gt;
&lt;br /&gt;
* Streaming read / write interface are &amp;quot;too local&amp;quot; to specific users. A bit more backend global awareness would likely be a good idea&lt;br /&gt;
* currently PostgreSQL does some prefetching with posix_fadvise_WILLNEED which is not asynchronous. See [[Readahead]].&lt;br /&gt;
&lt;br /&gt;
== io_method=worker ==&lt;br /&gt;
&lt;br /&gt;
* self-adjusting IO worker pool?&lt;br /&gt;
* more work on the spurious-wakeup vs latency tradeoff&lt;br /&gt;
&lt;br /&gt;
== io_method=posix_aio ==&lt;br /&gt;
&lt;br /&gt;
* add an &amp;quot;interruptible&amp;quot; field in shmem that can be used to avoid useless wakeups while the submitter is running synchronous IOs or already draining, with some double-checked flags to avoid races?&lt;br /&gt;
* detect presence of POSIX AIO automatically so you don&#039;t have to build --with-posix-aio&lt;br /&gt;
** would be good to pass smoke tests on all known POSIX AIO implementations before we do that; results so far:&lt;br /&gt;
*** Successes!&lt;br /&gt;
**** FreeBSD&lt;br /&gt;
**** Linux with Glibc and Musl&lt;br /&gt;
**** illumos and Solaris&lt;br /&gt;
**** macOS&lt;br /&gt;
***** need to bump up sysctl limits to get decent performance&lt;br /&gt;
**** AIX&lt;br /&gt;
***** needs shared_memory_type=sysv&lt;br /&gt;
***** aio_nwait() would be a better wait/reap interface than aio_suspend(), but sadly it can&#039;t wait for aio_fsync()&lt;br /&gt;
****** possible workaround: could use aio_nwait() whenever there are no aio_fsync calls outstanding&lt;br /&gt;
*** Failures, that will probably need to be excluded by default in early versions:&lt;br /&gt;
**** NetBSD 9 seems to spin eating 100% CPU in lio_listio() :-(&lt;br /&gt;
***** clue: an earlier iteration of this code was able to pass tests on NetBSD, when we were using aio_read(), aio_write() instead of lio_listio(), and when we were using SIGEV_SIGNAL instead of SIGEV_NONE&lt;br /&gt;
***** no bug report filed yet, but a NetBSD developer advised me not to try to use this, it&#039;s not ready&lt;br /&gt;
** if keeping it as a configure option, it should be &amp;quot;enable/disable&amp;quot;, not &amp;quot;with/without&amp;quot;&lt;br /&gt;
* fixed&lt;br /&gt;
** [https://cirrus-ci.com/task/6024059377942528?logs=cores#L7 crash because aio_suspend() sees EINVAL], because &amp;quot;activate&amp;quot; LIO IOCB too soon, [https://github.com/anarazel/postgres/commit/b174a85c446d4190cc89847760427a031711d2a1 commit (fixup to be squashed)]&lt;br /&gt;
** DONE: can we avoid waiting for a merge head from a later generation? yes&lt;br /&gt;
** DONE: can we avoid using atomics in a signal handler?  most uses removed but in flight count remains; could do somethign about this&lt;br /&gt;
** DONE: the naming and coding in the baton stuff is weird, needs a rethink -&amp;gt; done, now called &amp;quot;exchange&amp;quot; and shared with iocp&lt;br /&gt;
** DONE: kill the array of active IOs if not using aio_suspend (eg FreeBSD)&lt;br /&gt;
** DONE: would it be better to have the signal handler give up after a short time so it can get back to doing something useful, and the waiter wake it again after a bit? -&amp;gt; seems to be better, but may need some defences against thundering herds and useless wakeups&lt;br /&gt;
&lt;br /&gt;
== io_method=iocp ==&lt;br /&gt;
&lt;br /&gt;
* Acceptance criteria for moving iocp into the main aio branch (from aio-win32):&lt;br /&gt;
** &amp;quot;TRAP: FailedAssertion(&amp;quot;pgwin32_signal_event != NULL&amp;quot;, File: &amp;quot;C:\Users\ContainerAdministrator\AppData\Local\Temp\cirrus-ci-build\src\port\open.c&amp;quot;, Line: 78, PID: 3416)&amp;quot;&lt;br /&gt;
*** pgwin32_open() currently hacked to comment that out because of unresolved ordering problem, read_nondefault_variables() vs pgwin32_signal_initialize()&lt;br /&gt;
** currently pgaio_can_scatter_gather() considers only io_data_direct when deciding; but it applies also to WAL I/O (and potentially, in future, who knows, temporary files etc)&lt;br /&gt;
*** this matters primarily for Windows because Windows has a different answer depending on use of direct I/O, but we have at least 3 different GUCs to control that on diffrent subsystems&lt;br /&gt;
*** one idea would be for pgaio_can_scatter_gather() to take an IO and check the &amp;quot;scb&amp;quot; to see who is asking, or something like that...&lt;br /&gt;
*** another idea is to carry a &amp;quot;direct&amp;quot; flag on every IO so that the merge code doesn&#039;t have to concern itself with the details beyond that&lt;br /&gt;
** new API: pgaio_impl-&amp;gt;opening_fd(int fd, int flags) so that Windows impl can register fd with IOCP if flags &amp;amp; O_OVERLAPPED?  currently that&#039;s all a bit kludgy&lt;br /&gt;
* other things&lt;br /&gt;
** using GetQueuedCompletionEventEx() requires Windows Vista, but PostgreSQL currently targets XP+.  both are long dead, but the case for bumping it needs to be made in the community  &lt;br /&gt;
** does FileFlushBuffers() have an async cousin?  doesn&#039;t look like it&lt;br /&gt;
*** but there is an equivalen to fdatasync() in ntdll.dll; might be worth looking further&lt;br /&gt;
** pgaio_iocp_closing_fd() should drain only IOs on the given fd, not all IOs issued by this backend&lt;br /&gt;
*** compare see pgaio_posix_aio_closing_fd() -- it only drains results, it does not reap, to avoid deadlock risk!   need something like that here too&lt;br /&gt;
&lt;br /&gt;
* fixed &lt;br /&gt;
** DONE: calling it &amp;quot;iocp&amp;quot; for now (&amp;quot;windows&amp;quot; was too generic; we want to reserve the option to use the new Windows io_uring knockoff API which will probably be a separate method)&lt;br /&gt;
** DONE: kill the IOCP thread, and teach pgaio_windows_drain() to drain?&lt;br /&gt;
** DONE: solve the resulting deadlock by using the same procsignal trick as posix_aio?&lt;br /&gt;
** DONE: we should use GetQueuedCompletionEventEx() to consume multiple completions in one call, instead of a loop!&lt;br /&gt;
&lt;br /&gt;
== io_method=ioring ==&lt;br /&gt;
&lt;br /&gt;
* no code yet, just an idea&lt;br /&gt;
* ioring (note: no &#039;u&#039;, maybe should be win_ioring or some other name) is a hypothetical future IO method that would use [https://windows-internals.com/i-o-rings-when-one-i-o-operation-is-not-enough/ Windows I/O rings], a knock-off of Linux io_uring that is available in Window 11 preview but still changing&lt;br /&gt;
* so far the documentation only describes how to do reads but [https://twitter.com/axboe/status/1435614103314128897 we know that you can already do writes and flushes with the current preview], so there is enough there right now to write aio_ioring.c and hook it up&lt;br /&gt;
* the easiest way could be to have one ioring per backend and use aio_exchange.c to deal with cross-process problems (like io_method=posix_aio and io_method=iocp), but it may also be possible to have N iorings that are somehow shared between processes and then use the context system for interlocking (like io_method=io_uring, the Linux one); can you do that, somehow share the handle + memory mapping for the s and c queues + correct wakeups?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Quick start for PostgreSQL hackers/reviewers =&lt;br /&gt;
&lt;br /&gt;
* Testing the default mode, simulated AIO using io_method=worker (= the default setting)&lt;br /&gt;
** Try strace-ing the backend and IO worker processes to see how I/O syscalls are offloaded&lt;br /&gt;
** Adjust the number of io_worker processes with io_workers=N&lt;br /&gt;
** See the view pg_stat_aios that shows individual IOs&lt;br /&gt;
** See the view pg_stat_aio_backends that shows per-backend info&lt;br /&gt;
* Testing the use of direct I/O instead of PostgreSQL&#039;s traditional double buffering&lt;br /&gt;
** Set io_direct=data to disable OS buffering of relation data&lt;br /&gt;
** Set io_direct=wal to disable OS buffering WAL data&lt;br /&gt;
** Set io_direct=wal,wal_init,data to disable all&lt;br /&gt;
* Testing OS-specific options for &amp;quot;native&amp;quot; AIO&lt;br /&gt;
** Linux io_uring&lt;br /&gt;
*** install package liburing-dev (or liburing-devel on some distros)&lt;br /&gt;
*** configure with --with-liburing (or if using Meson, it should find it by itself?)&lt;br /&gt;
*** run with io_method=io_uring&lt;br /&gt;
** POSIX AIO, on macOS, FreeBSD, NetBSD, AIX, illumos, Solaris, Linux&lt;br /&gt;
*** configure --with-posix-aio&lt;br /&gt;
*** run with io_method=posix_aio&lt;br /&gt;
*** Some OS specific notes:&lt;br /&gt;
**** Linux POSIX AIO is fake, simulated by glibc and musl with threads, and works well enough for testing but wouldn&#039;t be a good choice to actually use&lt;br /&gt;
**** Solaris/illumos also has fake POSIX AIO (there is a more native/kernel supported AIO API but we don&#039;t support that)&lt;br /&gt;
**** macOS has very tight limits on AIO; like every other application that uses AIO we&#039;re going to have to publish recommentations to crank them up ([http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc39123_1254/html/qinstmac/qinstmac11.htm Sybase for example], VirtualBox is another); on the bright side, macOS defaults provide a nice workout for the IO retry code paths; that is, often we try to start an IO and the kernel says EAGAIN, so we way for one IO to complete and then try again, and you can see this in the pg_stat_aio_backends retry counter column&lt;br /&gt;
**** AIX only works if you set shared_memory_type=sysv because AIX&#039;s AIO can&#039;t access memory we allocate with mmap() (otherwise all IO fails with EFAULT)&lt;br /&gt;
**** AIX direct I/O might be unnecessarily serializing per-file, which we could fix with O_CONCURRENT, O_CIO or O_CIOR&lt;br /&gt;
**** HPUX probably also needs O_CIO to avoid serializing direct IO (native AIO not working there yet but this applies to worker mode too)&lt;br /&gt;
** Windows IOCP&lt;br /&gt;
*** run with io_method=iocp&lt;br /&gt;
*** (not yet pushed to main aio branch, find it in the aio-win32 branch until it&#039;s a little more complete...)&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=AIO&amp;diff=41507</id>
		<title>AIO</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=AIO&amp;diff=41507"/>
		<updated>2025-07-28T18:26:26Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Effort to add asynchronous I/O, vectored/multiblock I/O and optional direct I/O to PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
= High-level state =&lt;br /&gt;
&lt;br /&gt;
* Core AIO infrastructure merged, using workers and io_uring&lt;br /&gt;
* Buffer manager infrastructure for asynchronous reads has been merged &lt;br /&gt;
* Read streams use AIO for readahead, various places have been converted to use AIO [[#Users_of_read_streams]]&lt;br /&gt;
* Direct I/O can be enabled via the debug_io_direct=data GUC, but will be very slow for many workloads [[#Sub-Projects_required_for_.22minimal_real-world_use_of_DIO.22]]&lt;br /&gt;
&lt;br /&gt;
= Sub-Projects required for &amp;quot;minimal real-world use of DIO&amp;quot; =&lt;br /&gt;
&lt;br /&gt;
* readahead of the table fetches for ordered index scans&lt;br /&gt;
* Asynchronous writes for checkpointer / bgwriter and COPY&lt;br /&gt;
* Some additional read streams might be required (e.g. ALTER TABLE SET TABLESPACE)&lt;br /&gt;
&lt;br /&gt;
= Sub-Projects for AIO writes = &lt;br /&gt;
&lt;br /&gt;
* bufmgr.c infrastructure to race-free acquire exclusive lock on buffer when IO might be in progress&lt;br /&gt;
* sync.c requests cannot correctly be made in critical section, but that&#039;s required for buffered writes&lt;br /&gt;
* Don&#039;t dirty pages while IO is ongoing (i.e. don&#039;t write hint bits while IO is ongoing)&lt;br /&gt;
&lt;br /&gt;
= Streamification projects =&lt;br /&gt;
&lt;br /&gt;
In order to benefit from asynchronous I/O and vectored/multiblock I/O, we need to find all the places that pin buffers in a predictable way and teach them to do so via a stream.  Switching to the streaming API insulates them from future improvements.  For now, streamifying gets you vectored/multiblock I/O and systematic POSIX_FADV_WILLNEED hints only, but later true asynchronous modes will be proposed for the underlying infrastructure.&lt;br /&gt;
&lt;br /&gt;
== Users of read streams ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/postgres/postgres/commit/b7b0f3f27241e424b7103397489464d907cef2c4 Use streaming I/O in sequential scans.] -- committed in v17&lt;br /&gt;
* [https://github.com/postgres/postgres/commit/041b96802efa33d2bc9456f2ad946976b92b5ae1 Use streaming I/O in ANALYZE.] -- committed in 17&lt;br /&gt;
* [https://github.com/postgres/postgres/commit/3a352df05e65de740b4a375a0ecbcae97a1f6196 Use streaming I/O in pg_prewarm.] -- committed in 17&lt;br /&gt;
* [https://commitfest.postgresql.org/48/5089/ Use streaming I/O in VACUUM] -- work in progress&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4874/ Use streaming I/O in bitmap heap scans] -- work in progress&lt;br /&gt;
* btree [https://www.postgresql.org/message-id/flat/cf85f46f-b02f-05b2-5248-5000b894ebab%40enterprisedb.com related thread] -- todo&lt;br /&gt;
* brin -- todo&lt;br /&gt;
* gist -- todo&lt;br /&gt;
* gin -- todo&lt;br /&gt;
* CREATE DATABASE STRATEGY=WAL_LOG&lt;br /&gt;
* recovery -- todo&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Users of write streams ==&lt;br /&gt;
&lt;br /&gt;
There are not as many places that write data out.&lt;br /&gt;
&lt;br /&gt;
* CHECKPOINT -- work in progress&lt;br /&gt;
* CREATE INDEX (buffer pool bypass, extending/replacing the bulk_write.c facility) -- work in progress&lt;br /&gt;
* VACUUM writeback -- work in progress&lt;br /&gt;
* COPY writeback -- work in progress&lt;br /&gt;
* eviction writeback -- work in progress&lt;br /&gt;
&lt;br /&gt;
= Infrastructure changes =&lt;br /&gt;
&lt;br /&gt;
== Read stream API ==&lt;br /&gt;
&lt;br /&gt;
* basic buffered read stream, single relation + fork -- committed in 17&lt;br /&gt;
* multi-relation read stream -- todo&lt;br /&gt;
: Needed for recovery, but also useful for CREATE DATABASE ... STRATEGY=WAL_LOG.&lt;br /&gt;
&lt;br /&gt;
== Write stream API ==&lt;br /&gt;
&lt;br /&gt;
* basic buffered write stream -- todo&lt;br /&gt;
* driving sync_file_range -- todo&lt;br /&gt;
* driving WAL write frequency -- todo&lt;br /&gt;
* buffer pool bypass, needed for CREATE INDEX (bulk writes) -- todo&lt;br /&gt;
&lt;br /&gt;
== Committed ==&lt;br /&gt;
&lt;br /&gt;
* [https://commitfest.postgresql.org/33/3147/ O_DIRECT on macOS]&lt;br /&gt;
** So that Mac hackers can test io_data_direct=on (worker mode or posix_aio mode)&lt;br /&gt;
* [https://commitfest.postgresql.org/31/2885/ pg_pwritev() and pg_preadv()]&lt;br /&gt;
** Portable support for synchronous scatter/gather I/O&lt;br /&gt;
* [https://commitfest.postgresql.org/32/3008/ Replace buffer I/O locks with condition variables]&lt;br /&gt;
** So that backends other that the one that drains an I/O from the kernel can wait for it to complete&lt;br /&gt;
* [https://commitfest.postgresql.org/41/3999/ Aligned memory allocation]&lt;br /&gt;
** As required for buffers used in direct I/O&lt;br /&gt;
* [https://commitfest.postgresql.org/42/3996/ Direct I/O GUC]&lt;br /&gt;
** Released in 16 as debug_io_direct, to avoid attracting too much attention&lt;br /&gt;
* [https://commitfest.postgresql.org/34/2962/ Fix DROP TABLESPACE on Windows with ProcSignalBarrier]&lt;br /&gt;
** This is actually an ancient bug in PostgreSQL on Windows, but it was a bit harder to hit; make check fails every time under io_method=worker because processes hang around holding cached fds.&lt;br /&gt;
* [https://commitfest.postgresql.org/42/3993/ Refactor relation extension]&lt;br /&gt;
** This includes work to allow a backend to have multiple buffers in BM_IO_IN_PROGRESS state.&lt;br /&gt;
* [https://commitfest.postgresql.org/44/4532/ Streaming I/O, vectored I/O]&lt;br /&gt;
** Introduce the concept of streams of buffers, initially for more efficient synchronous I/O&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* partition_prune failing in CI due to compiler bug in specific MSVC release&lt;br /&gt;
** [https://www.postgresql.org/message-id/CAApHDvof3AEVFZTT3MArh4Tq1cAuCJb_wk8u7FV5KMzJNhU4GQ%40mail.gmail.com discussion on -hackers]&lt;br /&gt;
** [https://github.com/cirruslabs/docker-images-windows/issues/23 ticket to update compiler on CI] &lt;br /&gt;
** drop commit &amp;quot;XXX Add temporary workaround for partition_prune test on Windows&amp;quot;&lt;br /&gt;
* how should flush_range op be implemented on non-Linux?&lt;br /&gt;
* write documentation, per-OS information&lt;br /&gt;
* can we cut down on the number of places where we do non-blocking drain, for the benefit of implementations where that might be a system call?&lt;br /&gt;
* replication is slow with wal_sync_method=open_datasync, because we don&#039;t call WalSndWakeupRequest(); this explains why eg the subscription tests are super slow on macOS on CI (macOS defaults to open_datasync)&lt;br /&gt;
&lt;br /&gt;
== Larger Issues ==&lt;br /&gt;
&lt;br /&gt;
* Streaming read / write interface are &amp;quot;too local&amp;quot; to specific users. A bit more backend global awareness would likely be a good idea&lt;br /&gt;
* currently PostgreSQL does some prefetching with posix_fadvise_WILLNEED which is not asynchronous. See [[Readahead]].&lt;br /&gt;
&lt;br /&gt;
== io_method=worker ==&lt;br /&gt;
&lt;br /&gt;
* self-adjusting IO worker pool?&lt;br /&gt;
* more work on the spurious-wakeup vs latency tradeoff&lt;br /&gt;
&lt;br /&gt;
== io_method=posix_aio ==&lt;br /&gt;
&lt;br /&gt;
* add an &amp;quot;interruptible&amp;quot; field in shmem that can be used to avoid useless wakeups while the submitter is running synchronous IOs or already draining, with some double-checked flags to avoid races?&lt;br /&gt;
* detect presence of POSIX AIO automatically so you don&#039;t have to build --with-posix-aio&lt;br /&gt;
** would be good to pass smoke tests on all known POSIX AIO implementations before we do that; results so far:&lt;br /&gt;
*** Successes!&lt;br /&gt;
**** FreeBSD&lt;br /&gt;
**** Linux with Glibc and Musl&lt;br /&gt;
**** illumos and Solaris&lt;br /&gt;
**** macOS&lt;br /&gt;
***** need to bump up sysctl limits to get decent performance&lt;br /&gt;
**** AIX&lt;br /&gt;
***** needs shared_memory_type=sysv&lt;br /&gt;
***** aio_nwait() would be a better wait/reap interface than aio_suspend(), but sadly it can&#039;t wait for aio_fsync()&lt;br /&gt;
****** possible workaround: could use aio_nwait() whenever there are no aio_fsync calls outstanding&lt;br /&gt;
*** Failures, that will probably need to be excluded by default in early versions:&lt;br /&gt;
**** NetBSD 9 seems to spin eating 100% CPU in lio_listio() :-(&lt;br /&gt;
***** clue: an earlier iteration of this code was able to pass tests on NetBSD, when we were using aio_read(), aio_write() instead of lio_listio(), and when we were using SIGEV_SIGNAL instead of SIGEV_NONE&lt;br /&gt;
***** no bug report filed yet, but a NetBSD developer advised me not to try to use this, it&#039;s not ready&lt;br /&gt;
** if keeping it as a configure option, it should be &amp;quot;enable/disable&amp;quot;, not &amp;quot;with/without&amp;quot;&lt;br /&gt;
* fixed&lt;br /&gt;
** [https://cirrus-ci.com/task/6024059377942528?logs=cores#L7 crash because aio_suspend() sees EINVAL], because &amp;quot;activate&amp;quot; LIO IOCB too soon, [https://github.com/anarazel/postgres/commit/b174a85c446d4190cc89847760427a031711d2a1 commit (fixup to be squashed)]&lt;br /&gt;
** DONE: can we avoid waiting for a merge head from a later generation? yes&lt;br /&gt;
** DONE: can we avoid using atomics in a signal handler?  most uses removed but in flight count remains; could do somethign about this&lt;br /&gt;
** DONE: the naming and coding in the baton stuff is weird, needs a rethink -&amp;gt; done, now called &amp;quot;exchange&amp;quot; and shared with iocp&lt;br /&gt;
** DONE: kill the array of active IOs if not using aio_suspend (eg FreeBSD)&lt;br /&gt;
** DONE: would it be better to have the signal handler give up after a short time so it can get back to doing something useful, and the waiter wake it again after a bit? -&amp;gt; seems to be better, but may need some defences against thundering herds and useless wakeups&lt;br /&gt;
&lt;br /&gt;
== io_method=iocp ==&lt;br /&gt;
&lt;br /&gt;
* Acceptance criteria for moving iocp into the main aio branch (from aio-win32):&lt;br /&gt;
** &amp;quot;TRAP: FailedAssertion(&amp;quot;pgwin32_signal_event != NULL&amp;quot;, File: &amp;quot;C:\Users\ContainerAdministrator\AppData\Local\Temp\cirrus-ci-build\src\port\open.c&amp;quot;, Line: 78, PID: 3416)&amp;quot;&lt;br /&gt;
*** pgwin32_open() currently hacked to comment that out because of unresolved ordering problem, read_nondefault_variables() vs pgwin32_signal_initialize()&lt;br /&gt;
** currently pgaio_can_scatter_gather() considers only io_data_direct when deciding; but it applies also to WAL I/O (and potentially, in future, who knows, temporary files etc)&lt;br /&gt;
*** this matters primarily for Windows because Windows has a different answer depending on use of direct I/O, but we have at least 3 different GUCs to control that on diffrent subsystems&lt;br /&gt;
*** one idea would be for pgaio_can_scatter_gather() to take an IO and check the &amp;quot;scb&amp;quot; to see who is asking, or something like that...&lt;br /&gt;
*** another idea is to carry a &amp;quot;direct&amp;quot; flag on every IO so that the merge code doesn&#039;t have to concern itself with the details beyond that&lt;br /&gt;
** new API: pgaio_impl-&amp;gt;opening_fd(int fd, int flags) so that Windows impl can register fd with IOCP if flags &amp;amp; O_OVERLAPPED?  currently that&#039;s all a bit kludgy&lt;br /&gt;
* other things&lt;br /&gt;
** using GetQueuedCompletionEventEx() requires Windows Vista, but PostgreSQL currently targets XP+.  both are long dead, but the case for bumping it needs to be made in the community  &lt;br /&gt;
** does FileFlushBuffers() have an async cousin?  doesn&#039;t look like it&lt;br /&gt;
*** but there is an equivalen to fdatasync() in ntdll.dll; might be worth looking further&lt;br /&gt;
** pgaio_iocp_closing_fd() should drain only IOs on the given fd, not all IOs issued by this backend&lt;br /&gt;
*** compare see pgaio_posix_aio_closing_fd() -- it only drains results, it does not reap, to avoid deadlock risk!   need something like that here too&lt;br /&gt;
&lt;br /&gt;
* fixed &lt;br /&gt;
** DONE: calling it &amp;quot;iocp&amp;quot; for now (&amp;quot;windows&amp;quot; was too generic; we want to reserve the option to use the new Windows io_uring knockoff API which will probably be a separate method)&lt;br /&gt;
** DONE: kill the IOCP thread, and teach pgaio_windows_drain() to drain?&lt;br /&gt;
** DONE: solve the resulting deadlock by using the same procsignal trick as posix_aio?&lt;br /&gt;
** DONE: we should use GetQueuedCompletionEventEx() to consume multiple completions in one call, instead of a loop!&lt;br /&gt;
&lt;br /&gt;
== io_method=ioring ==&lt;br /&gt;
&lt;br /&gt;
* no code yet, just an idea&lt;br /&gt;
* ioring (note: no &#039;u&#039;, maybe should be win_ioring or some other name) is a hypothetical future IO method that would use [https://windows-internals.com/i-o-rings-when-one-i-o-operation-is-not-enough/ Windows I/O rings], a knock-off of Linux io_uring that is available in Window 11 preview but still changing&lt;br /&gt;
* so far the documentation only describes how to do reads but [https://twitter.com/axboe/status/1435614103314128897 we know that you can already do writes and flushes with the current preview], so there is enough there right now to write aio_ioring.c and hook it up&lt;br /&gt;
* the easiest way could be to have one ioring per backend and use aio_exchange.c to deal with cross-process problems (like io_method=posix_aio and io_method=iocp), but it may also be possible to have N iorings that are somehow shared between processes and then use the context system for interlocking (like io_method=io_uring, the Linux one); can you do that, somehow share the handle + memory mapping for the s and c queues + correct wakeups?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Quick start for PostgreSQL hackers/reviewers =&lt;br /&gt;
&lt;br /&gt;
* Testing the default mode, simulated AIO using io_method=worker (= the default setting)&lt;br /&gt;
** Try strace-ing the backend and IO worker processes to see how I/O syscalls are offloaded&lt;br /&gt;
** Adjust the number of io_worker processes with io_workers=N&lt;br /&gt;
** See the view pg_stat_aios that shows individual IOs&lt;br /&gt;
** See the view pg_stat_aio_backends that shows per-backend info&lt;br /&gt;
* Testing the use of direct I/O instead of PostgreSQL&#039;s traditional double buffering&lt;br /&gt;
** Set io_direct=data to disable OS buffering of relation data&lt;br /&gt;
** Set io_direct=wal to disable OS buffering WAL data&lt;br /&gt;
** Set io_direct=wal,wal_init,data to disable all&lt;br /&gt;
* Testing OS-specific options for &amp;quot;native&amp;quot; AIO&lt;br /&gt;
** Linux io_uring&lt;br /&gt;
*** install package liburing-dev (or liburing-devel on some distros)&lt;br /&gt;
*** configure with --with-liburing (or if using Meson, it should find it by itself?)&lt;br /&gt;
*** run with io_method=io_uring&lt;br /&gt;
** POSIX AIO, on macOS, FreeBSD, NetBSD, AIX, illumos, Solaris, Linux&lt;br /&gt;
*** configure --with-posix-aio&lt;br /&gt;
*** run with io_method=posix_aio&lt;br /&gt;
*** Some OS specific notes:&lt;br /&gt;
**** Linux POSIX AIO is fake, simulated by glibc and musl with threads, and works well enough for testing but wouldn&#039;t be a good choice to actually use&lt;br /&gt;
**** Solaris/illumos also has fake POSIX AIO (there is a more native/kernel supported AIO API but we don&#039;t support that)&lt;br /&gt;
**** macOS has very tight limits on AIO; like every other application that uses AIO we&#039;re going to have to publish recommentations to crank them up ([http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc39123_1254/html/qinstmac/qinstmac11.htm Sybase for example], VirtualBox is another); on the bright side, macOS defaults provide a nice workout for the IO retry code paths; that is, often we try to start an IO and the kernel says EAGAIN, so we way for one IO to complete and then try again, and you can see this in the pg_stat_aio_backends retry counter column&lt;br /&gt;
**** AIX only works if you set shared_memory_type=sysv because AIX&#039;s AIO can&#039;t access memory we allocate with mmap() (otherwise all IO fails with EFAULT)&lt;br /&gt;
**** AIX direct I/O might be unnecessarily serializing per-file, which we could fix with O_CONCURRENT, O_CIO or O_CIOR&lt;br /&gt;
**** HPUX probably also needs O_CIO to avoid serializing direct IO (native AIO not working there yet but this applies to worker mode too)&lt;br /&gt;
** Windows IOCP&lt;br /&gt;
*** run with io_method=iocp&lt;br /&gt;
*** (not yet pushed to main aio branch, find it in the aio-win32 branch until it&#039;s a little more complete...)&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=AIO&amp;diff=41506</id>
		<title>AIO</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=AIO&amp;diff=41506"/>
		<updated>2025-07-28T17:49:05Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Effort to add asynchronous I/O, vectored/multiblock I/O and optional direct I/O to PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
= High-level state =&lt;br /&gt;
&lt;br /&gt;
* Core AIO infrastructure merged, using workers and io_uring&lt;br /&gt;
* Buffer manager infrastructure for asynchronous reads has been merged &lt;br /&gt;
* Read streams use AIO for readahead, various places have been converted to use AIO [[#Users_of_read_streams]]&lt;br /&gt;
&lt;br /&gt;
= Sub-Projects required for &amp;quot;minimal real-world use of DIO&amp;quot; =&lt;br /&gt;
&lt;br /&gt;
* readahead of the table fetches for ordered index scans&lt;br /&gt;
* Asynchronous writes for checkpointer / bgwriter and COPY&lt;br /&gt;
* Some additional read streams might be required (e.g. ALTER TABLE SET TABLESPACE)&lt;br /&gt;
&lt;br /&gt;
= Sub-Projects for AIO writes = &lt;br /&gt;
&lt;br /&gt;
* bufmgr.c infrastructure to race-free acquire exclusive lock on buffer when IO might be in progress&lt;br /&gt;
* sync.c requests cannot correctly be made in critical section, but that&#039;s required for buffered writes&lt;br /&gt;
* Don&#039;t dirty pages while IO is ongoing (i.e. don&#039;t write hint bits while IO is ongoing)&lt;br /&gt;
&lt;br /&gt;
= Streamification projects =&lt;br /&gt;
&lt;br /&gt;
In order to benefit from asynchronous I/O and vectored/multiblock I/O, we need to find all the places that pin buffers in a predictable way and teach them to do so via a stream.  Switching to the streaming API insulates them from future improvements.  For now, streamifying gets you vectored/multiblock I/O and systematic POSIX_FADV_WILLNEED hints only, but later true asynchronous modes will be proposed for the underlying infrastructure.&lt;br /&gt;
&lt;br /&gt;
== Users of read streams ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/postgres/postgres/commit/b7b0f3f27241e424b7103397489464d907cef2c4 Use streaming I/O in sequential scans.] -- committed in v17&lt;br /&gt;
* [https://github.com/postgres/postgres/commit/041b96802efa33d2bc9456f2ad946976b92b5ae1 Use streaming I/O in ANALYZE.] -- committed in 17&lt;br /&gt;
* [https://github.com/postgres/postgres/commit/3a352df05e65de740b4a375a0ecbcae97a1f6196 Use streaming I/O in pg_prewarm.] -- committed in 17&lt;br /&gt;
* [https://commitfest.postgresql.org/48/5089/ Use streaming I/O in VACUUM] -- work in progress&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4874/ Use streaming I/O in bitmap heap scans] -- work in progress&lt;br /&gt;
* btree [https://www.postgresql.org/message-id/flat/cf85f46f-b02f-05b2-5248-5000b894ebab%40enterprisedb.com related thread] -- todo&lt;br /&gt;
* brin -- todo&lt;br /&gt;
* gist -- todo&lt;br /&gt;
* gin -- todo&lt;br /&gt;
* CREATE DATABASE STRATEGY=WAL_LOG&lt;br /&gt;
* recovery -- todo&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Users of write streams ==&lt;br /&gt;
&lt;br /&gt;
There are not as many places that write data out.&lt;br /&gt;
&lt;br /&gt;
* CHECKPOINT -- work in progress&lt;br /&gt;
* CREATE INDEX (buffer pool bypass, extending/replacing the bulk_write.c facility) -- work in progress&lt;br /&gt;
* VACUUM writeback -- work in progress&lt;br /&gt;
* COPY writeback -- work in progress&lt;br /&gt;
* eviction writeback -- work in progress&lt;br /&gt;
&lt;br /&gt;
= Infrastructure changes =&lt;br /&gt;
&lt;br /&gt;
== Read stream API ==&lt;br /&gt;
&lt;br /&gt;
* basic buffered read stream, single relation + fork -- committed in 17&lt;br /&gt;
* multi-relation read stream -- todo&lt;br /&gt;
: Needed for recovery, but also useful for CREATE DATABASE ... STRATEGY=WAL_LOG.&lt;br /&gt;
&lt;br /&gt;
== Write stream API ==&lt;br /&gt;
&lt;br /&gt;
* basic buffered write stream -- todo&lt;br /&gt;
* driving sync_file_range -- todo&lt;br /&gt;
* driving WAL write frequency -- todo&lt;br /&gt;
* buffer pool bypass, needed for CREATE INDEX (bulk writes) -- todo&lt;br /&gt;
&lt;br /&gt;
== Committed ==&lt;br /&gt;
&lt;br /&gt;
* [https://commitfest.postgresql.org/33/3147/ O_DIRECT on macOS]&lt;br /&gt;
** So that Mac hackers can test io_data_direct=on (worker mode or posix_aio mode)&lt;br /&gt;
* [https://commitfest.postgresql.org/31/2885/ pg_pwritev() and pg_preadv()]&lt;br /&gt;
** Portable support for synchronous scatter/gather I/O&lt;br /&gt;
* [https://commitfest.postgresql.org/32/3008/ Replace buffer I/O locks with condition variables]&lt;br /&gt;
** So that backends other that the one that drains an I/O from the kernel can wait for it to complete&lt;br /&gt;
* [https://commitfest.postgresql.org/41/3999/ Aligned memory allocation]&lt;br /&gt;
** As required for buffers used in direct I/O&lt;br /&gt;
* [https://commitfest.postgresql.org/42/3996/ Direct I/O GUC]&lt;br /&gt;
** Released in 16 as debug_io_direct, to avoid attracting too much attention&lt;br /&gt;
* [https://commitfest.postgresql.org/34/2962/ Fix DROP TABLESPACE on Windows with ProcSignalBarrier]&lt;br /&gt;
** This is actually an ancient bug in PostgreSQL on Windows, but it was a bit harder to hit; make check fails every time under io_method=worker because processes hang around holding cached fds.&lt;br /&gt;
* [https://commitfest.postgresql.org/42/3993/ Refactor relation extension]&lt;br /&gt;
** This includes work to allow a backend to have multiple buffers in BM_IO_IN_PROGRESS state.&lt;br /&gt;
* [https://commitfest.postgresql.org/44/4532/ Streaming I/O, vectored I/O]&lt;br /&gt;
** Introduce the concept of streams of buffers, initially for more efficient synchronous I/O&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* partition_prune failing in CI due to compiler bug in specific MSVC release&lt;br /&gt;
** [https://www.postgresql.org/message-id/CAApHDvof3AEVFZTT3MArh4Tq1cAuCJb_wk8u7FV5KMzJNhU4GQ%40mail.gmail.com discussion on -hackers]&lt;br /&gt;
** [https://github.com/cirruslabs/docker-images-windows/issues/23 ticket to update compiler on CI] &lt;br /&gt;
** drop commit &amp;quot;XXX Add temporary workaround for partition_prune test on Windows&amp;quot;&lt;br /&gt;
* how should flush_range op be implemented on non-Linux?&lt;br /&gt;
* write documentation, per-OS information&lt;br /&gt;
* can we cut down on the number of places where we do non-blocking drain, for the benefit of implementations where that might be a system call?&lt;br /&gt;
* replication is slow with wal_sync_method=open_datasync, because we don&#039;t call WalSndWakeupRequest(); this explains why eg the subscription tests are super slow on macOS on CI (macOS defaults to open_datasync)&lt;br /&gt;
&lt;br /&gt;
== Larger Issues ==&lt;br /&gt;
&lt;br /&gt;
* Streaming read / write interface are &amp;quot;too local&amp;quot; to specific users. A bit more backend global awareness would likely be a good idea&lt;br /&gt;
* currently PostgreSQL does some prefetching with posix_fadvise_WILLNEED which is not asynchronous. See [[Readahead]].&lt;br /&gt;
&lt;br /&gt;
== io_method=worker ==&lt;br /&gt;
&lt;br /&gt;
* self-adjusting IO worker pool?&lt;br /&gt;
* more work on the spurious-wakeup vs latency tradeoff&lt;br /&gt;
&lt;br /&gt;
== io_method=posix_aio ==&lt;br /&gt;
&lt;br /&gt;
* add an &amp;quot;interruptible&amp;quot; field in shmem that can be used to avoid useless wakeups while the submitter is running synchronous IOs or already draining, with some double-checked flags to avoid races?&lt;br /&gt;
* detect presence of POSIX AIO automatically so you don&#039;t have to build --with-posix-aio&lt;br /&gt;
** would be good to pass smoke tests on all known POSIX AIO implementations before we do that; results so far:&lt;br /&gt;
*** Successes!&lt;br /&gt;
**** FreeBSD&lt;br /&gt;
**** Linux with Glibc and Musl&lt;br /&gt;
**** illumos and Solaris&lt;br /&gt;
**** macOS&lt;br /&gt;
***** need to bump up sysctl limits to get decent performance&lt;br /&gt;
**** AIX&lt;br /&gt;
***** needs shared_memory_type=sysv&lt;br /&gt;
***** aio_nwait() would be a better wait/reap interface than aio_suspend(), but sadly it can&#039;t wait for aio_fsync()&lt;br /&gt;
****** possible workaround: could use aio_nwait() whenever there are no aio_fsync calls outstanding&lt;br /&gt;
*** Failures, that will probably need to be excluded by default in early versions:&lt;br /&gt;
**** NetBSD 9 seems to spin eating 100% CPU in lio_listio() :-(&lt;br /&gt;
***** clue: an earlier iteration of this code was able to pass tests on NetBSD, when we were using aio_read(), aio_write() instead of lio_listio(), and when we were using SIGEV_SIGNAL instead of SIGEV_NONE&lt;br /&gt;
***** no bug report filed yet, but a NetBSD developer advised me not to try to use this, it&#039;s not ready&lt;br /&gt;
** if keeping it as a configure option, it should be &amp;quot;enable/disable&amp;quot;, not &amp;quot;with/without&amp;quot;&lt;br /&gt;
* fixed&lt;br /&gt;
** [https://cirrus-ci.com/task/6024059377942528?logs=cores#L7 crash because aio_suspend() sees EINVAL], because &amp;quot;activate&amp;quot; LIO IOCB too soon, [https://github.com/anarazel/postgres/commit/b174a85c446d4190cc89847760427a031711d2a1 commit (fixup to be squashed)]&lt;br /&gt;
** DONE: can we avoid waiting for a merge head from a later generation? yes&lt;br /&gt;
** DONE: can we avoid using atomics in a signal handler?  most uses removed but in flight count remains; could do somethign about this&lt;br /&gt;
** DONE: the naming and coding in the baton stuff is weird, needs a rethink -&amp;gt; done, now called &amp;quot;exchange&amp;quot; and shared with iocp&lt;br /&gt;
** DONE: kill the array of active IOs if not using aio_suspend (eg FreeBSD)&lt;br /&gt;
** DONE: would it be better to have the signal handler give up after a short time so it can get back to doing something useful, and the waiter wake it again after a bit? -&amp;gt; seems to be better, but may need some defences against thundering herds and useless wakeups&lt;br /&gt;
&lt;br /&gt;
== io_method=iocp ==&lt;br /&gt;
&lt;br /&gt;
* Acceptance criteria for moving iocp into the main aio branch (from aio-win32):&lt;br /&gt;
** &amp;quot;TRAP: FailedAssertion(&amp;quot;pgwin32_signal_event != NULL&amp;quot;, File: &amp;quot;C:\Users\ContainerAdministrator\AppData\Local\Temp\cirrus-ci-build\src\port\open.c&amp;quot;, Line: 78, PID: 3416)&amp;quot;&lt;br /&gt;
*** pgwin32_open() currently hacked to comment that out because of unresolved ordering problem, read_nondefault_variables() vs pgwin32_signal_initialize()&lt;br /&gt;
** currently pgaio_can_scatter_gather() considers only io_data_direct when deciding; but it applies also to WAL I/O (and potentially, in future, who knows, temporary files etc)&lt;br /&gt;
*** this matters primarily for Windows because Windows has a different answer depending on use of direct I/O, but we have at least 3 different GUCs to control that on diffrent subsystems&lt;br /&gt;
*** one idea would be for pgaio_can_scatter_gather() to take an IO and check the &amp;quot;scb&amp;quot; to see who is asking, or something like that...&lt;br /&gt;
*** another idea is to carry a &amp;quot;direct&amp;quot; flag on every IO so that the merge code doesn&#039;t have to concern itself with the details beyond that&lt;br /&gt;
** new API: pgaio_impl-&amp;gt;opening_fd(int fd, int flags) so that Windows impl can register fd with IOCP if flags &amp;amp; O_OVERLAPPED?  currently that&#039;s all a bit kludgy&lt;br /&gt;
* other things&lt;br /&gt;
** using GetQueuedCompletionEventEx() requires Windows Vista, but PostgreSQL currently targets XP+.  both are long dead, but the case for bumping it needs to be made in the community  &lt;br /&gt;
** does FileFlushBuffers() have an async cousin?  doesn&#039;t look like it&lt;br /&gt;
*** but there is an equivalen to fdatasync() in ntdll.dll; might be worth looking further&lt;br /&gt;
** pgaio_iocp_closing_fd() should drain only IOs on the given fd, not all IOs issued by this backend&lt;br /&gt;
*** compare see pgaio_posix_aio_closing_fd() -- it only drains results, it does not reap, to avoid deadlock risk!   need something like that here too&lt;br /&gt;
&lt;br /&gt;
* fixed &lt;br /&gt;
** DONE: calling it &amp;quot;iocp&amp;quot; for now (&amp;quot;windows&amp;quot; was too generic; we want to reserve the option to use the new Windows io_uring knockoff API which will probably be a separate method)&lt;br /&gt;
** DONE: kill the IOCP thread, and teach pgaio_windows_drain() to drain?&lt;br /&gt;
** DONE: solve the resulting deadlock by using the same procsignal trick as posix_aio?&lt;br /&gt;
** DONE: we should use GetQueuedCompletionEventEx() to consume multiple completions in one call, instead of a loop!&lt;br /&gt;
&lt;br /&gt;
== io_method=ioring ==&lt;br /&gt;
&lt;br /&gt;
* no code yet, just an idea&lt;br /&gt;
* ioring (note: no &#039;u&#039;, maybe should be win_ioring or some other name) is a hypothetical future IO method that would use [https://windows-internals.com/i-o-rings-when-one-i-o-operation-is-not-enough/ Windows I/O rings], a knock-off of Linux io_uring that is available in Window 11 preview but still changing&lt;br /&gt;
* so far the documentation only describes how to do reads but [https://twitter.com/axboe/status/1435614103314128897 we know that you can already do writes and flushes with the current preview], so there is enough there right now to write aio_ioring.c and hook it up&lt;br /&gt;
* the easiest way could be to have one ioring per backend and use aio_exchange.c to deal with cross-process problems (like io_method=posix_aio and io_method=iocp), but it may also be possible to have N iorings that are somehow shared between processes and then use the context system for interlocking (like io_method=io_uring, the Linux one); can you do that, somehow share the handle + memory mapping for the s and c queues + correct wakeups?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Quick start for PostgreSQL hackers/reviewers =&lt;br /&gt;
&lt;br /&gt;
* Testing the default mode, simulated AIO using io_method=worker (= the default setting)&lt;br /&gt;
** Try strace-ing the backend and IO worker processes to see how I/O syscalls are offloaded&lt;br /&gt;
** Adjust the number of io_worker processes with io_workers=N&lt;br /&gt;
** See the view pg_stat_aios that shows individual IOs&lt;br /&gt;
** See the view pg_stat_aio_backends that shows per-backend info&lt;br /&gt;
* Testing the use of direct I/O instead of PostgreSQL&#039;s traditional double buffering&lt;br /&gt;
** Set io_direct=data to disable OS buffering of relation data&lt;br /&gt;
** Set io_direct=wal to disable OS buffering WAL data&lt;br /&gt;
** Set io_direct=wal,wal_init,data to disable all&lt;br /&gt;
* Testing OS-specific options for &amp;quot;native&amp;quot; AIO&lt;br /&gt;
** Linux io_uring&lt;br /&gt;
*** install package liburing-dev (or liburing-devel on some distros)&lt;br /&gt;
*** configure with --with-liburing (or if using Meson, it should find it by itself?)&lt;br /&gt;
*** run with io_method=io_uring&lt;br /&gt;
** POSIX AIO, on macOS, FreeBSD, NetBSD, AIX, illumos, Solaris, Linux&lt;br /&gt;
*** configure --with-posix-aio&lt;br /&gt;
*** run with io_method=posix_aio&lt;br /&gt;
*** Some OS specific notes:&lt;br /&gt;
**** Linux POSIX AIO is fake, simulated by glibc and musl with threads, and works well enough for testing but wouldn&#039;t be a good choice to actually use&lt;br /&gt;
**** Solaris/illumos also has fake POSIX AIO (there is a more native/kernel supported AIO API but we don&#039;t support that)&lt;br /&gt;
**** macOS has very tight limits on AIO; like every other application that uses AIO we&#039;re going to have to publish recommentations to crank them up ([http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc39123_1254/html/qinstmac/qinstmac11.htm Sybase for example], VirtualBox is another); on the bright side, macOS defaults provide a nice workout for the IO retry code paths; that is, often we try to start an IO and the kernel says EAGAIN, so we way for one IO to complete and then try again, and you can see this in the pg_stat_aio_backends retry counter column&lt;br /&gt;
**** AIX only works if you set shared_memory_type=sysv because AIX&#039;s AIO can&#039;t access memory we allocate with mmap() (otherwise all IO fails with EFAULT)&lt;br /&gt;
**** AIX direct I/O might be unnecessarily serializing per-file, which we could fix with O_CONCURRENT, O_CIO or O_CIOR&lt;br /&gt;
**** HPUX probably also needs O_CIO to avoid serializing direct IO (native AIO not working there yet but this applies to worker mode too)&lt;br /&gt;
** Windows IOCP&lt;br /&gt;
*** run with io_method=iocp&lt;br /&gt;
*** (not yet pushed to main aio branch, find it in the aio-win32 branch until it&#039;s a little more complete...)&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Atomics&amp;diff=41426</id>
		<title>Atomics</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Atomics&amp;diff=41426"/>
		<updated>2025-07-15T13:52:15Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Architecture&lt;br /&gt;
!single-copy r/w atomicity&lt;br /&gt;
!TAS&lt;br /&gt;
!cmpxchg&lt;br /&gt;
!xadd&lt;br /&gt;
!gcc support from version&lt;br /&gt;
!last year sold&lt;br /&gt;
!cur. PG support&lt;br /&gt;
!references&lt;br /&gt;
|-&lt;br /&gt;
!x86-32(386)&lt;br /&gt;
|?&lt;br /&gt;
|y (via xchgb)&lt;br /&gt;
|n&lt;br /&gt;
|n&lt;br /&gt;
|4.1&lt;br /&gt;
|2007&lt;br /&gt;
|&lt;br /&gt;
|not fully contained in architecture manual anymore&lt;br /&gt;
|-&lt;br /&gt;
!x86-32(486)&lt;br /&gt;
|4&lt;br /&gt;
|y (via xchgb/xadd)&lt;br /&gt;
|4 (via cmpxchg)&lt;br /&gt;
|4 (via xadd)&lt;br /&gt;
|4.1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Intel® 64 and IA-32 Architectures Software Developer’s Manual, Vol 3A, Section 8.1.1&lt;br /&gt;
Instruction SetReference, A-M, CMPXCHG&lt;br /&gt;
|-&lt;br /&gt;
!x86-32(586+)&lt;br /&gt;
|1/2/4/8&lt;br /&gt;
|y (via xchgb/xadd)&lt;br /&gt;
|1/2/4/8 (via cmpxchg/cmpxchg8b)&lt;br /&gt;
|1/2/4/8 (via xadd/cmpxchg8b)&lt;br /&gt;
|4.1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Intel® 64 and IA-32 Architectures Software Developer’s Manual, Vol 3A, Section 8.1.1&lt;br /&gt;
|-&lt;br /&gt;
!x86-64&lt;br /&gt;
|1/2/4/8/16&lt;br /&gt;
|y (via xchgb/xadd)&lt;br /&gt;
|1/2/4/8/16* (via cmpxchg/cmpxchg16b)&lt;br /&gt;
|1/2/4/8/16* (via xadd/cmpxchg16b)&lt;br /&gt;
|4.1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Intel® 64 and IA-32 Architectures Software Developer’s Manual, Vol 3A, Section 8.1.1&lt;br /&gt;
|-&lt;br /&gt;
!alpha&lt;br /&gt;
|4/8&lt;br /&gt;
|y&lt;br /&gt;
|4/8 (via LL/SC)&lt;br /&gt;
|4/8 (via LL/SC)&lt;br /&gt;
|4.1&lt;br /&gt;
|2007&lt;br /&gt;
|gcc only&lt;br /&gt;
|&amp;quot;AXP architecture manual ftp://ftp.netbsd.org/pub/NetBSD/misc/dec-docs/index.html#EY-T132E-DP&amp;quot; section 5.5.2, 5.2.2&lt;br /&gt;
|-&lt;br /&gt;
!arm-v5 and earlier&lt;br /&gt;
|1/2/4?/8***&lt;br /&gt;
|y (via SWPB)&lt;br /&gt;
|n ***&lt;br /&gt;
|n ***&lt;br /&gt;
|4.6/4.4 (linux)&lt;br /&gt;
|&lt;br /&gt;
|gcc only&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!arm-v6+&lt;br /&gt;
(application profiles, w. MMU)&lt;br /&gt;
|1/2/4/8***&lt;br /&gt;
|y (via ldrex/strex)&lt;br /&gt;
|4 (via ldrex/strex)&lt;br /&gt;
|4 (via ldrex/strex)&lt;br /&gt;
|4.6/4.4 (linux)&lt;br /&gt;
|&lt;br /&gt;
|gcc only&lt;br /&gt;
|&amp;quot;Arm Architecture Manual&amp;quot; A3.5.3 Atomicity in the ARM architecture&lt;br /&gt;
|-&lt;br /&gt;
!arm-v7+&lt;br /&gt;
(application profiles, w. MMU)&lt;br /&gt;
|1/2/4/8***&lt;br /&gt;
|y (via ldrex/strex)&lt;br /&gt;
|1/2/4/8 (via ldrex/strex)&lt;br /&gt;
|1/2/4/8 (via ldrex/strex)&lt;br /&gt;
|4.6/4.4 (linux)&lt;br /&gt;
|&lt;br /&gt;
|gcc only&lt;br /&gt;
|&amp;quot;Arm Architecture Manual&amp;quot; A3.5.3 Atomicity in the ARM architecture&lt;br /&gt;
|-&lt;br /&gt;
!powerpc&lt;br /&gt;
|1/2/4/8&lt;br /&gt;
|y (via lwarx/stwcx)&lt;br /&gt;
|4/8 (via lwarx/stwcx, 8 only some versions)&lt;br /&gt;
|4/8 (via lwarx/stwcx)&lt;br /&gt;
|4.1&lt;br /&gt;
|&lt;br /&gt;
|gcc only&lt;br /&gt;
|&amp;quot;PowerPC Microprocessor Family: The Programming Environments for 32-Bit Microprocessors&amp;quot;: 5.1.2 Atomicity&lt;br /&gt;
&amp;quot;Enhanced PowerPC™ Architecture&amp;quot;: 6.1.3 Single-Copy Atomicity&lt;br /&gt;
|-&lt;br /&gt;
!64bit powerpc&lt;br /&gt;
|1/2/4/8&lt;br /&gt;
|y (via lwarx/stwcx,ldarx/stdcx)&lt;br /&gt;
|1/2/4/8 (LL/SC)&lt;br /&gt;
|1/2/4/8 (LL/SC)&lt;br /&gt;
|4.1&lt;br /&gt;
|&lt;br /&gt;
|gcc only&lt;br /&gt;
|&amp;quot;Enhanced PowerPC™ Architecture&amp;quot;: 6.1.3 Single-Copy Atomicity&lt;br /&gt;
|-&lt;br /&gt;
!s390/s390x&lt;br /&gt;
|4/8**&lt;br /&gt;
|y (via compare/swap)&lt;br /&gt;
|4/8 (cs/cds)&lt;br /&gt;
|4/8 (cs/cds)&lt;br /&gt;
|4.1&lt;br /&gt;
|&lt;br /&gt;
|gcc only&lt;br /&gt;
|&amp;quot;z/Architecture Principles of Operation&amp;quot;: 7-53 Compare and Swap, 5-89 Storage-Operand Consistency&lt;br /&gt;
|-&lt;br /&gt;
!sparcv8&lt;br /&gt;
|1/2/4/8&lt;br /&gt;
|y (via ldstub)&lt;br /&gt;
|n&lt;br /&gt;
|n&lt;br /&gt;
|4.2&lt;br /&gt;
|1997&lt;br /&gt;
|gcc,sunpro&lt;br /&gt;
|&amp;quot;The Sparc Architecture Manual Version 8&amp;quot; : 6.1 Basic Definitions, Overview of Model&lt;br /&gt;
|-&lt;br /&gt;
!sparcv9&lt;br /&gt;
|1/2/4/8&lt;br /&gt;
|y (via ldstub)&lt;br /&gt;
|4/8 (via cas/casx)&lt;br /&gt;
|4/8 (via cas/casx)&lt;br /&gt;
|4.2&lt;br /&gt;
|&lt;br /&gt;
|gcc,sunpro&lt;br /&gt;
|&amp;quot;The Sparc Architecture Manual Version 9&amp;quot; : D.4.1 Value Atomicity&lt;br /&gt;
|-&lt;br /&gt;
!mips/mipsel&lt;br /&gt;
|4?****&lt;br /&gt;
|y (ll/sc)&lt;br /&gt;
|4/8 (ll/sc)&lt;br /&gt;
|4/8 (ll/sc)&lt;br /&gt;
|4.3&lt;br /&gt;
|&lt;br /&gt;
|gcc&lt;br /&gt;
|&amp;quot;MIPS Architecture Manual Vol I&amp;quot; : 4.1.1.4: Loads and stores Used For Atomic Updates&lt;br /&gt;
|-&lt;br /&gt;
!mips64&lt;br /&gt;
|4?/8?****&lt;br /&gt;
|y (ll/sc)&lt;br /&gt;
|4/8 (ll/sc, lld/scd)&lt;br /&gt;
|4/8 (ll/sc, lld/scd)&lt;br /&gt;
|4.3&lt;br /&gt;
|&lt;br /&gt;
|gcc&lt;br /&gt;
|&amp;quot;MIPS Architecture Manual Vol I&amp;quot; : 4.1.1.4: Loads and stores Used For Atomic Updates&lt;br /&gt;
|-&lt;br /&gt;
!m68k&lt;br /&gt;
|4?****&lt;br /&gt;
|y&lt;br /&gt;
|4 (via cas)&lt;br /&gt;
|4 (via cas)&lt;br /&gt;
|4.7&lt;br /&gt;
|&lt;br /&gt;
|gcc linux/netbsd???*****&lt;br /&gt;
|&amp;quot;m68000 Family Programmers Manual&amp;quot;: 3.1.111 Multiprocessor instructions&lt;br /&gt;
|-&lt;br /&gt;
!ia64&lt;br /&gt;
|1/2/4/8/16&lt;br /&gt;
|y&lt;br /&gt;
|4/8 (cmpxchg)&lt;br /&gt;
|4/8 (xadd)&lt;br /&gt;
|4.1&lt;br /&gt;
| -&lt;br /&gt;
|gcc,icc,hpux acc&lt;br /&gt;
|&amp;quot;Intel® Itanium® Architecture Software Developer&#039;s Manual&amp;quot;: 4.5 Memory Datum Alignment and Atomicity; CMPXCHG8B? - Compare and Exchange&lt;br /&gt;
|-&lt;br /&gt;
!pa-risc&lt;br /&gt;
|4&lt;br /&gt;
|y (ldcwx)&lt;br /&gt;
|n&lt;br /&gt;
|n&lt;br /&gt;
| -&lt;br /&gt;
|2005/2008&lt;br /&gt;
|gcc, hppa acc&lt;br /&gt;
|&amp;quot;PA-RISC 1.1. Architecture and Instruction Set Reference Manual&amp;quot;: 4-3 Atomicity of Storage Accesses, 3-16 The Synchronization Primitive, 5.40 Load and Clear Word Indexed&lt;br /&gt;
|-&lt;br /&gt;
!m32r&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|requires patched glibc&lt;br /&gt;
unmaintained website/mostly dead&lt;br /&gt;
|http://www.linux-m32r.org/&lt;br /&gt;
|-&lt;br /&gt;
!VAX&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1997/2005&lt;br /&gt;
|gcc/netbsd&lt;br /&gt;
|http://web.archive.org/web/20000815201016/http://www.compaq.com/alphaserver/vax/vax_letter_final.html&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; excluding some early AMD64 models&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt; only a rather limited number of instructions adhere&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;***&amp;lt;/nowiki&amp;gt; linux kernel emulation available&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;****&amp;lt;/nowiki&amp;gt; linux and various libraries assume 4 and 8. Seems to be undocumented.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*****&amp;lt;/nowiki&amp;gt; coldfire &amp;lt; v4 is unsupported as PG uses tas which has been removed from coldfire CPUs (which has no MMU anyway)&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Multithreading&amp;diff=41136</id>
		<title>Multithreading</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Multithreading&amp;diff=41136"/>
		<updated>2025-05-16T15:39:38Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
&lt;br /&gt;
pgsql-hackers thread: https://www.postgresql.org/message-id/31cc6df9-53fe-3cd9-af5b-ac0d801163f4%40iki.fi&lt;br /&gt;
&lt;br /&gt;
PGConf.eu Presentation: https://www.postgresql.eu/events/pgconfeu2023/schedule/session/4845-multi-threaded-postgresql/&lt;br /&gt;
&lt;br /&gt;
Work-in-progress git branch: https://github.com/hlinnaka/postgres/tree/threading&lt;br /&gt;
&lt;br /&gt;
== Ongoing work ==&lt;br /&gt;
&lt;br /&gt;
These patches are contributing to the effort:&lt;br /&gt;
&lt;br /&gt;
* SendProcSignal() → SendInterrupt(), using latches: https://commitfest.postgresql.org/49/5118/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Done:&lt;br /&gt;
* replace strtok(): https://commitfest.postgresql.org/48/5071/&lt;br /&gt;
* thread-safety: gmtime_r(), localtime_r() https://commitfest.postgresql.org/48/5084/&lt;br /&gt;
* Refactoring postmaster&#039;s code to cleanup after child exit: https://www.postgresql.org/message-id/8f2118b9-79e3-4af7-b2c9-bd5818193ca4%40iki.fi&lt;br /&gt;
* Remove dependency on setlocale() for collation. https://commitfest.postgresql.org/48/5023/&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
=== Global variables ===&lt;br /&gt;
&lt;br /&gt;
Global variables in PostgreSQL fall into a few different categories:&lt;br /&gt;
&lt;br /&gt;
* per-session state&lt;br /&gt;
* pointers to shared memory areas&lt;br /&gt;
* other variables that are initialized at postmaster startup and never change after that&lt;br /&gt;
* constants&lt;br /&gt;
&lt;br /&gt;
Many global variables are used to hold GUCs, and they can fall into any of those categories depending on whether they&#039;re PGC_POSTMASTER or PGC_USERSET.&lt;br /&gt;
&lt;br /&gt;
The plan:&lt;br /&gt;
&lt;br /&gt;
* Add annotations to all global variables, to mark which category they fall into. Variables holding per-session state are turned into thread-local variables. The distinction between the other categories is just for documentation purposes.&lt;br /&gt;
* Provide a tool that can list all global variables that are missing the annotations (pgguclifetimes). Add that as a compile-time check ideally. This will also be useful for extension authors to find missing annotations in extensions.&lt;br /&gt;
** alternative idea: could we use a simple perl script for this, like we do for the PGDLLIMPORT case?&lt;br /&gt;
* Potential standalone value:&lt;br /&gt;
** &amp;quot;modified once&amp;quot; annotated variables could be put in a separate binary section which would improve performance&lt;br /&gt;
** Could help with the engineering overhead of figuring out where to initialize at postmaster startup&lt;br /&gt;
&lt;br /&gt;
=== Extensions ===&lt;br /&gt;
&lt;br /&gt;
Extensions will make the transition at their own pace&lt;br /&gt;
&lt;br /&gt;
* Add field to control file or the PG_MODULE magic to mark whether an extension supports multi-process mode only, or multi-threaded model only, or both&lt;br /&gt;
** other considerations: good documentation will be key, also need to work with the extension community to build understanding and consensus&lt;br /&gt;
&lt;br /&gt;
* Python has traditionally been single-threaded, but see https://peps.python.org/pep-0554/&lt;br /&gt;
** Python &amp;gt;= 3.12 can spawn non-shared interpreters&lt;br /&gt;
&lt;br /&gt;
* What about Perl, other PLs?&lt;br /&gt;
&lt;br /&gt;
* http://postgr.es/m/CA+TgmoYsKJnVjj94HJTSOeS1=TmAgV5L=DVTd_TYL=XUKCbfEA@mail.gmail.com&lt;br /&gt;
&lt;br /&gt;
* Robert volunteered to look into this at 2024.pgconf.dev&lt;br /&gt;
&lt;br /&gt;
=== PIDs in user-facing interfaces ===&lt;br /&gt;
&lt;br /&gt;
A few places expose PIDs to users:&lt;br /&gt;
&lt;br /&gt;
* pg_terminate_backend(&amp;lt;pid&amp;gt;)&lt;br /&gt;
* pg_stat_activity&lt;br /&gt;
* query cancellation&lt;br /&gt;
&lt;br /&gt;
Plan:&lt;br /&gt;
&lt;br /&gt;
* Replace PID with a thread id.&lt;br /&gt;
* Could use OS thread ID, but behavior isn&#039;t totally consistent across platforms&lt;br /&gt;
* Consensus at 2024.pgconf.dev seemed to be that inventing our own 32-bit thread ID would be better&lt;br /&gt;
* Possibly pgprocno + counter&lt;br /&gt;
* Need to make sure we don&#039;t reuse thread IDs too quickly, else we might terminate the wrong backend.&lt;br /&gt;
* Potential standalone value: decoupling the relationship between thread and session could enable other features&lt;br /&gt;
&lt;br /&gt;
* Robert volunteered to look into this at 2024.pgconf.dev&lt;br /&gt;
&lt;br /&gt;
=== Unix Signals ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.postgresql.org/wiki/Signals Separate page with more details on this topic.]&lt;br /&gt;
&lt;br /&gt;
We use Unix signals between processes currently. It&#039;s hard to use them for inter-thread communication within the same process. When you send a signal, you send it to a process, and any thread in the process can handle it.&lt;br /&gt;
&lt;br /&gt;
* Refactor inter-process signals with something like Procsignal and latches&lt;br /&gt;
&lt;br /&gt;
* With a single-process, you cannot easily &amp;quot;kill &amp;lt;pid&amp;gt;&amp;quot; to send SIGTERM or SIGUSR1 to a single backend anymore. We can provide a &amp;quot;pg_ctl signal&amp;quot; command to replace that.&lt;br /&gt;
&lt;br /&gt;
* Description/Tasks/Components:&lt;br /&gt;
** timers (which use sigalarm)&lt;br /&gt;
** deadlock detection? (already done with waitlatch so nothing happening in signal handlers so nothing to do here?)&lt;br /&gt;
** Sub-sub projects&lt;br /&gt;
*** multiplex waiting on a latch and don&#039;t rely on signals (latchification project -- replacing setlatch with interrupt driven concept)&lt;br /&gt;
*** Abstraction for the C11 thread functions that is portable (think about C11 features and C99 compiler)&lt;br /&gt;
&lt;br /&gt;
* Thomas and Heikki volunteered to look into this at 2024.pgconf.dev&lt;br /&gt;
&lt;br /&gt;
=== Replace non-thread safe library functions with thread-safe variants ===&lt;br /&gt;
&lt;br /&gt;
* strerror() -&amp;gt; strerror_r()&lt;br /&gt;
&lt;br /&gt;
* setlocale() -&amp;gt; uselocale()&lt;br /&gt;
** no uselocale on windows, workarounds are complex&lt;br /&gt;
** https://www.postgresql.org/message-id/CWMW5OZBWJ10.1YFLQWSUE5RE9@neon.tech&lt;br /&gt;
** https://www.postgresql.org/message-id/17946-3e84cb577e9551c3@postgresql.org&lt;br /&gt;
** http://postgr.es/m/2228884bb1f1a02614b39f71a90c94d2cc8a3a2f.camel@j-davis.com&lt;br /&gt;
&lt;br /&gt;
* getopt_long()&lt;br /&gt;
** getopt_long implementation used for windows could be used for other platforms&lt;br /&gt;
** rearchitect postmaster startup to change options passing&lt;br /&gt;
&lt;br /&gt;
* Make pg_strtok() re-entrant&lt;br /&gt;
&lt;br /&gt;
* not all string functions with _l have been implemented in glibc&lt;br /&gt;
&lt;br /&gt;
* https://www.postgresql.org/message-id/856e5ec3-879f-42ee-8258-8bcc6ec9bdea@eisentraut.org&lt;br /&gt;
&lt;br /&gt;
* Peter and Nathan volunteered to look into this at 2024.pgconf.dev&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
&lt;br /&gt;
* Add a GUC to enable multi-threaded mode&lt;br /&gt;
* Replace fork() with pthread_create(). Yay!&lt;br /&gt;
&lt;br /&gt;
* Make virtual filedescriptors (fd.c) work with threads&lt;br /&gt;
** Heikki volunteered to look into this at 2024.pgconf.dev (with Andres identifying performance fallout)&lt;br /&gt;
** increase the limit for max number of file descriptors&lt;br /&gt;
** diagnose and fix the performance fallout (due to sharing VFD cache and maybe because some OSes don&#039;t cope well with large numbers of file descriptors)&lt;br /&gt;
** split fd.c into two files: one for virtual file descriptor abstraction and another for &amp;quot;other&amp;quot; file-related functions (see also src/common/file_utils.c)&lt;br /&gt;
&lt;br /&gt;
* Make bootparse.y and other bison/flex generated code re-entrant&lt;br /&gt;
** main parser is already done, but others need work, which is thought to be simple&lt;br /&gt;
** Peter volunteered to look into this at 2024.pgconf.dev&lt;br /&gt;
&lt;br /&gt;
* Refactoring guc_tables.c&lt;br /&gt;
** currently uses memory address of global GUC variable (and that won&#039;t work anymore with threads)&lt;br /&gt;
&lt;br /&gt;
* Refactor connection acceptance&lt;br /&gt;
** Currently the postmaster accepts connections and then spawns a process&lt;br /&gt;
** In the threaded model we&#039;ll want 2 processes, a supervisor that only restarts the other process, and the main process with all the threads&lt;br /&gt;
** But that means connection acceptance needs to be split out from supervisor tasks&lt;br /&gt;
&lt;br /&gt;
* verify_cb in be-secure-openssl.c uses a (static) global cert_errdetail variable to pass information. Refactor to use x509_store_ctx_get_ex_data&lt;br /&gt;
&lt;br /&gt;
== Open Questions ==&lt;br /&gt;
&lt;br /&gt;
* If an extension launches threads today, it might call SPI or other PostgreSQL functions from a different thread. That works today, if you&#039;re careful and only do that from one thread at at time. After replacing global variables with thread-local variables, that no longer works. Or did it work? We have things like longjmp() and stack depth checks that would already break that?&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_18_Open_Items&amp;diff=40840</id>
		<title>PostgreSQL 18 Open Items</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_18_Open_Items&amp;diff=40840"/>
		<updated>2025-04-01T20:23:31Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Open Issues ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Please place new open items at the end of the list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: If known, please list the Owner of the open item.&lt;br /&gt;
&lt;br /&gt;
* Use-after-free with stats_fetch_consistency = snapshot and pg_stat_get_backend_wal()&lt;br /&gt;
** Owner: Michael Paquier&lt;br /&gt;
** Commit: {{PgCommitURL|76def4cdd}}&lt;br /&gt;
** {{messageLink|f1788cc0-253a-4a3a-aee0-1b8ab9538736@gmail.com|Details of report}}&lt;br /&gt;
&lt;br /&gt;
== Decisions to Recheck Mid-Beta ==&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|flat/CAKAnmmKwiMHik5AHmBEdf5vqzbOBbcwEPHo4-PioWeAbzwcTOQ@mail.gmail.com|Enable data checksums by default}}&lt;br /&gt;
** Commit: {{PgCommitURL|04bec894a0}}&lt;br /&gt;
** Data checksums have been enabled by default. pg_upgrade cannot upgrade between non-checksum and checksum instances, so some additional steps are required by the user. Check whether the upgrade experience is tolerable and sufficiently documented. See the following list of threads that might be enhancing the end user experience:&lt;br /&gt;
*** {{messageLink|flat/E07A611B-9CF3-4FDB-8CE8-A221E39040EC%40yesql.se|Changing the state of data checksums in a running cluster}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|flat/653f3b84-fc87-45a7-9a0c-bfb4fcab3e7d%40eisentraut.org|fixing tsearch locale support}}&lt;br /&gt;
** Commit: {{PgCommitURL|fb1a18810f0}}&lt;br /&gt;
** Text search locale support has been updated and integrated into the common locale framework.  Possible upgrade issues should probably at least be noted in the release notes.&lt;br /&gt;
&lt;br /&gt;
* Enable statistics in pg_dump by default (Jeff Davis)?&lt;br /&gt;
** {{messageLink|1=CAKAnmmKCgnqcd3x4Z+5yXsY7urpDS6D_NZG7pr=DYD=LHt5X4g@mail.gmail.com|2=Greg Sabino Mullane}}&lt;br /&gt;
** {{messageLink|1=CA+TgmoYGuEC=E4TbomRyqO8+Uav=90G0dYXw=rA1d5UmRB76Yg@mail.gmail.com|2=Robert Haas}}&lt;br /&gt;
&lt;br /&gt;
* decide what io_method to default to (Andres Freund)&lt;br /&gt;
** Commit: {{PgCommitURL|247ce06b883}}&lt;br /&gt;
&lt;br /&gt;
== Older bugs affecting stable branches ==&lt;br /&gt;
&lt;br /&gt;
=== Live issues ===&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|873c33c5-ef9e-41f6-80b2-2f5e11869f1c%40garret.ru|Incorrect results for bitmap heap scan.}}&lt;br /&gt;
** Certain Bitmap Heap scans only test the visibility map before returning tuples. This can conflict with VACUUM removing tuples, thus causing more tuples to be returned from the scan than what are actually visible.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|1=CAH2-Wz%3DPqOziyRSrnN5jAtfXWXY7-BJcHz9S355LH8Dt%3D5qxWQ@mail.gmail.com|2=Incorrect results for (SP-)GIST index-only scans}}&lt;br /&gt;
** Similar issue like the above.&lt;br /&gt;
&lt;br /&gt;
=== Fixed issues ===&lt;br /&gt;
&lt;br /&gt;
== Non-bugs ==&lt;br /&gt;
&lt;br /&gt;
== Resolved Issues ==&lt;br /&gt;
&lt;br /&gt;
=== resolved before 18beta1 ===&lt;br /&gt;
&lt;br /&gt;
== Won&#039;t Fix ==&lt;br /&gt;
&lt;br /&gt;
== Important Dates ==&lt;br /&gt;
&lt;br /&gt;
Current schedule:&lt;br /&gt;
&lt;br /&gt;
* Feature Freeze: April 8, 2025 0:00 AoE&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Release Management Team]]&lt;br /&gt;
* [[PostgreSQL 17 Open Items]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Open_Items]]&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_18_Open_Items&amp;diff=40839</id>
		<title>PostgreSQL 18 Open Items</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_18_Open_Items&amp;diff=40839"/>
		<updated>2025-04-01T20:23:16Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Open Issues ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Please place new open items at the end of the list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: If known, please list the Owner of the open item.&lt;br /&gt;
&lt;br /&gt;
* Use-after-free with stats_fetch_consistency = snapshot and pg_stat_get_backend_wal()&lt;br /&gt;
** Owner: Michael Paquier&lt;br /&gt;
** Commit: {{PgCommitURL|76def4cdd}}&lt;br /&gt;
** {{messageLink|f1788cc0-253a-4a3a-aee0-1b8ab9538736@gmail.com|Details of report}}&lt;br /&gt;
&lt;br /&gt;
== Decisions to Recheck Mid-Beta ==&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|flat/CAKAnmmKwiMHik5AHmBEdf5vqzbOBbcwEPHo4-PioWeAbzwcTOQ@mail.gmail.com|Enable data checksums by default}}&lt;br /&gt;
** Commit: {{PgCommitURL|04bec894a0}}&lt;br /&gt;
** Data checksums have been enabled by default. pg_upgrade cannot upgrade between non-checksum and checksum instances, so some additional steps are required by the user. Check whether the upgrade experience is tolerable and sufficiently documented. See the following list of threads that might be enhancing the end user experience:&lt;br /&gt;
*** {{messageLink|flat/E07A611B-9CF3-4FDB-8CE8-A221E39040EC%40yesql.se|Changing the state of data checksums in a running cluster}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|flat/653f3b84-fc87-45a7-9a0c-bfb4fcab3e7d%40eisentraut.org|fixing tsearch locale support}}&lt;br /&gt;
** Commit: {{PgCommitURL|fb1a18810f0}}&lt;br /&gt;
** Text search locale support has been updated and integrated into the common locale framework.  Possible upgrade issues should probably at least be noted in the release notes.&lt;br /&gt;
&lt;br /&gt;
* Enable statistics in pg_dump by default (Jeff Davis)?&lt;br /&gt;
** {{messageLink|1=CAKAnmmKCgnqcd3x4Z+5yXsY7urpDS6D_NZG7pr=DYD=LHt5X4g@mail.gmail.com|2=Greg Sabino Mullane}}&lt;br /&gt;
** {{messageLink|1=CA+TgmoYGuEC=E4TbomRyqO8+Uav=90G0dYXw=rA1d5UmRB76Yg@mail.gmail.com|2=Robert Haas}}&lt;br /&gt;
&lt;br /&gt;
* decide what io_method to default on (Andres Freund)&lt;br /&gt;
** Commit: {{PgCommitURL|247ce06b883}}&lt;br /&gt;
&lt;br /&gt;
== Older bugs affecting stable branches ==&lt;br /&gt;
&lt;br /&gt;
=== Live issues ===&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|873c33c5-ef9e-41f6-80b2-2f5e11869f1c%40garret.ru|Incorrect results for bitmap heap scan.}}&lt;br /&gt;
** Certain Bitmap Heap scans only test the visibility map before returning tuples. This can conflict with VACUUM removing tuples, thus causing more tuples to be returned from the scan than what are actually visible.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|1=CAH2-Wz%3DPqOziyRSrnN5jAtfXWXY7-BJcHz9S355LH8Dt%3D5qxWQ@mail.gmail.com|2=Incorrect results for (SP-)GIST index-only scans}}&lt;br /&gt;
** Similar issue like the above.&lt;br /&gt;
&lt;br /&gt;
=== Fixed issues ===&lt;br /&gt;
&lt;br /&gt;
== Non-bugs ==&lt;br /&gt;
&lt;br /&gt;
== Resolved Issues ==&lt;br /&gt;
&lt;br /&gt;
=== resolved before 18beta1 ===&lt;br /&gt;
&lt;br /&gt;
== Won&#039;t Fix ==&lt;br /&gt;
&lt;br /&gt;
== Important Dates ==&lt;br /&gt;
&lt;br /&gt;
Current schedule:&lt;br /&gt;
&lt;br /&gt;
* Feature Freeze: April 8, 2025 0:00 AoE&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Release Management Team]]&lt;br /&gt;
* [[PostgreSQL 17 Open Items]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Open_Items]]&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_18_Open_Items&amp;diff=40838</id>
		<title>PostgreSQL 18 Open Items</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_18_Open_Items&amp;diff=40838"/>
		<updated>2025-04-01T20:21:32Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: Move open item into the right section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Open Issues ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Please place new open items at the end of the list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: If known, please list the Owner of the open item.&lt;br /&gt;
&lt;br /&gt;
* Use-after-free with stats_fetch_consistency = snapshot and pg_stat_get_backend_wal()&lt;br /&gt;
** Owner: Michael Paquier&lt;br /&gt;
** Commit: {{PgCommitURL|76def4cdd}}&lt;br /&gt;
** {{messageLink|f1788cc0-253a-4a3a-aee0-1b8ab9538736@gmail.com|Details of report}}&lt;br /&gt;
&lt;br /&gt;
== Decisions to Recheck Mid-Beta ==&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|flat/CAKAnmmKwiMHik5AHmBEdf5vqzbOBbcwEPHo4-PioWeAbzwcTOQ@mail.gmail.com|Enable data checksums by default}}&lt;br /&gt;
** Commit: {{PgCommitURL|04bec894a0}}&lt;br /&gt;
** Data checksums have been enabled by default. pg_upgrade cannot upgrade between non-checksum and checksum instances, so some additional steps are required by the user. Check whether the upgrade experience is tolerable and sufficiently documented. See the following list of threads that might be enhancing the end user experience:&lt;br /&gt;
*** {{messageLink|flat/E07A611B-9CF3-4FDB-8CE8-A221E39040EC%40yesql.se|Changing the state of data checksums in a running cluster}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|flat/653f3b84-fc87-45a7-9a0c-bfb4fcab3e7d%40eisentraut.org|fixing tsearch locale support}}&lt;br /&gt;
** Commit: {{PgCommitURL|fb1a18810f0}}&lt;br /&gt;
** Text search locale support has been updated and integrated into the common locale framework.  Possible upgrade issues should probably at least be noted in the release notes.&lt;br /&gt;
&lt;br /&gt;
* Enable statistics in pg_dump by default (Jeff Davis)?&lt;br /&gt;
** {{messageLink|1=CAKAnmmKCgnqcd3x4Z+5yXsY7urpDS6D_NZG7pr=DYD=LHt5X4g@mail.gmail.com|2=Greg Sabino Mullane}}&lt;br /&gt;
** {{messageLink|1=CA+TgmoYGuEC=E4TbomRyqO8+Uav=90G0dYXw=rA1d5UmRB76Yg@mail.gmail.com|2=Robert Haas}}&lt;br /&gt;
&lt;br /&gt;
== Older bugs affecting stable branches ==&lt;br /&gt;
&lt;br /&gt;
=== Live issues ===&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|873c33c5-ef9e-41f6-80b2-2f5e11869f1c%40garret.ru|Incorrect results for bitmap heap scan.}}&lt;br /&gt;
** Certain Bitmap Heap scans only test the visibility map before returning tuples. This can conflict with VACUUM removing tuples, thus causing more tuples to be returned from the scan than what are actually visible.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|1=CAH2-Wz%3DPqOziyRSrnN5jAtfXWXY7-BJcHz9S355LH8Dt%3D5qxWQ@mail.gmail.com|2=Incorrect results for (SP-)GIST index-only scans}}&lt;br /&gt;
** Similar issue like the above.&lt;br /&gt;
&lt;br /&gt;
=== Fixed issues ===&lt;br /&gt;
&lt;br /&gt;
== Non-bugs ==&lt;br /&gt;
&lt;br /&gt;
== Resolved Issues ==&lt;br /&gt;
&lt;br /&gt;
=== resolved before 18beta1 ===&lt;br /&gt;
&lt;br /&gt;
== Won&#039;t Fix ==&lt;br /&gt;
&lt;br /&gt;
== Important Dates ==&lt;br /&gt;
&lt;br /&gt;
Current schedule:&lt;br /&gt;
&lt;br /&gt;
* Feature Freeze: April 8, 2025 0:00 AoE&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Release Management Team]]&lt;br /&gt;
* [[PostgreSQL 17 Open Items]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Open_Items]]&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=2024.pgconf.dev_Patch_Review_Workshop&amp;diff=39103</id>
		<title>2024.pgconf.dev Patch Review Workshop</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=2024.pgconf.dev_Patch_Review_Workshop&amp;diff=39103"/>
		<updated>2024-05-30T16:10:15Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: /* Suggested Patches for Less Experienced Reviewers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Conference: https://2024.pgconf.dev/&amp;lt;br /&amp;gt;&lt;br /&gt;
Session: https://www.pgevents.ca/events/pgconfdev2024/schedule/session/40-patch-review-workshop-registration-required/&lt;br /&gt;
&lt;br /&gt;
Please do not add patches to the lists below. Instead, contact Robert and Andres and send them your suggestions. Thanks.&lt;br /&gt;
&lt;br /&gt;
== Suggested Patches for More Experienced Reviewers ==&lt;br /&gt;
&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4476/ Extract numeric field in JSONB more effectively] by Andy Fan&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4950/ Show WAL stats on pg_stat_io] by Nazir Bilal Yavuz (reviewed by group of Bharath, Ilya, Andrey)&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4947/ Use read streams in CREATE DATABASE command when the strategy is wal_log] by Nazir Bilal Yavuz&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4518/ Support prepared statement invalidation when result or argument types change] by Jelte Fennema-Nio&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4972/ Virtual generated columns] by Peter Eisentraut&lt;br /&gt;
* [https://commitfest.postgresql.org/48/3663/ Switching XLog source from archive to streaming when primary available] by Bharath Rupireddy&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4754/ Add LSN &amp;lt;-&amp;gt; time conversion facility] by Melanie Plageman (reviewed by group of Bharath, Ilya, Andrey)&lt;br /&gt;
* [https://commitfest.postgresql.org/48/3733/ Amcheck verification of GiST and GIN] by Andrey Borodin&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4929/ apply_scanjoin_target_to_paths and partitionwise join] by Ashutosh Bapat&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4908/ Recheck foreign key if a referenced collation was nondeterministic] by Paul Jungwirth&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4884/ Fix rare recovery shutdown hang] by Thomas Munro&lt;br /&gt;
* [https://commitfest.postgresql.org/48/3998/ SetLatches] by Thomas Munro&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4480/ Add pg_wait_for_lockers() function] by Will Mortensen&lt;br /&gt;
&lt;br /&gt;
== Suggested Patches for Less Experienced Reviewers ==&lt;br /&gt;
&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4764/ Adding comments to help understand psql hidden queries] by Greg Sabino Mullane&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4951/ teach pg_combinebackup to detect deleted files where possible] by Robert Haas&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4926/ SupportRequestRows support function for generate_series_timestamptz] by David Rowley&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4932/ Add memory context type to pg_backend_memory_contexts view] by David Rowley&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4888/ Run deferred triggers in the correct security context] by Laurenz Albe&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4549/ Should consider materializing the cheapest inner path in consider_parallel_nestloop()] by Tender Wang (to review by Paul, Tomasz, Yuki)&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4553/ Reuse child_relids in try_partitionwise_join] by Ashutosh Bapat&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4964/ Reduce the log spam by excluding certain SQLSTATEs] by Laurenz Albe (Bilal, Melih, Trevor)&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4975/ pg_parse_json: don&#039;t leak token copies on failure] by Jacob Champion&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4453/ Flush disk write caches by default on macOS and Windows] by Thomas Munro&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4999/ Restrict EXPLAIN (ANALYZE) for RLS and security_barrier views] by Laurenz Albe&lt;br /&gt;
* [https://commitfest.postgresql.org/48/4650/ Support for named parsed statement in psql] by Anthonin Bonnefoy&lt;br /&gt;
* [https://commitfest.postgresql.org/48/3256/ functions to compute size of schemas/AMs] by Justin Pryzby (David, Stefan, Joseph)&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PgCon_2024_Developer_Meeting&amp;diff=39070</id>
		<title>PgCon 2024 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PgCon_2024_Developer_Meeting&amp;diff=39070"/>
		<updated>2024-05-28T20:07:37Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Minutes =&lt;br /&gt;
&lt;br /&gt;
Rough, I (Andres) was delegated this because I was a few minutes late :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Operations and Governance - Jonathan Katz ==&lt;br /&gt;
&lt;br /&gt;
* Lots of committees aren&#039;t known even by people involved in the project&lt;br /&gt;
* Joe Conway plans to create a committee website&lt;br /&gt;
* Lots of independently moving parts of the project&lt;br /&gt;
** partially intentionally done that way, for resilience to takeover&lt;br /&gt;
** also an obstruction to transparency&lt;br /&gt;
* Teams:&lt;br /&gt;
** Core Team - &amp;quot;last resort&amp;quot;, conflicts etc&lt;br /&gt;
** Committers - code obviously, plenty policy around that&lt;br /&gt;
** Pginfra - manages all the postgres infrastructure, servers for git etc&lt;br /&gt;
** Code of Conduct Committee - Deal with violations of the CoC&lt;br /&gt;
** Security 0 deal with security issues in our code&lt;br /&gt;
*** CNA  we can now assign our own CVEs&lt;br /&gt;
** Release - manage releases of postgres&lt;br /&gt;
*** RMT&lt;br /&gt;
*** Press&lt;br /&gt;
** Translators&lt;br /&gt;
** Packaging - build binary packages of postgres&lt;br /&gt;
** Press&lt;br /&gt;
** Planet&lt;br /&gt;
** pg.org moderation&lt;br /&gt;
** pgweb&lt;br /&gt;
** twitter etc&lt;br /&gt;
** Contributors team&lt;br /&gt;
** Funds&lt;br /&gt;
** GSCOC&lt;br /&gt;
** PGCA - Trademark etc&lt;br /&gt;
** Postgres Women&lt;br /&gt;
** Funds Groups&lt;br /&gt;
** Events Canada, organizing this conference&lt;br /&gt;
** I missed transcribing some, Jonathan missed listing some&lt;br /&gt;
* Amazing that it works, but it also often doesn&#039;t&lt;br /&gt;
* Robert: Really important to have list public, for volunteers to be able to oin&lt;br /&gt;
* Karen Jax: staffing, not manning teams&lt;br /&gt;
* Joe: Quick recap of the plans for listing of the teams on the website&lt;br /&gt;
** some teams already have pages, but there&#039;s no coherent way to find those&lt;br /&gt;
** have index with brief description and links to pages&lt;br /&gt;
&lt;br /&gt;
== Core Team - Tom Lane ==&lt;br /&gt;
&lt;br /&gt;
* At Berkeley, Postgres then Postgres 95, a few outside users&lt;br /&gt;
* Marc Fournier volunteered to host development&lt;br /&gt;
* Initial Core Team:&lt;br /&gt;
** 1996:&lt;br /&gt;
*** Mark Fournier&lt;br /&gt;
*** Bruce Mojian&lt;br /&gt;
*** Bryan Henderson&lt;br /&gt;
** 1998:&lt;br /&gt;
*** Jan Wiek&lt;br /&gt;
*** Tom Lane&lt;br /&gt;
* Initially did nearly all the work&lt;br /&gt;
* Early additional responsibility:&lt;br /&gt;
** releases&lt;br /&gt;
** infrastructure&lt;br /&gt;
** committter selection&lt;br /&gt;
* Additional responsibility&lt;br /&gt;
** Liaison&lt;br /&gt;
** Security&lt;br /&gt;
** Trademark&lt;br /&gt;
** really because ther wasn&#039;t anybody else&lt;br /&gt;
* Core never did:&lt;br /&gt;
** Website&lt;br /&gt;
** Advocacy&lt;br /&gt;
** Fundraising&lt;br /&gt;
* 2000: Landmark / Great Bridge&lt;br /&gt;
** started a postgres services company&lt;br /&gt;
** closed in .com bust&lt;br /&gt;
** Asked: How can this be done well with the community?&lt;br /&gt;
*** Not enough bandwidth / experience in core *&amp;gt; delegate&lt;br /&gt;
** Delegate:&lt;br /&gt;
*** security, in 2007&lt;br /&gt;
*** pginfra, in 2011&lt;br /&gt;
**** took over more incrementally&lt;br /&gt;
**** Tom doesn&#039;t remember all the details&lt;br /&gt;
**** some small preexisting responsibilities&lt;br /&gt;
*** Trademark issues&lt;br /&gt;
**** PgCAC, formally incorporated NPO&lt;br /&gt;
*** Release, in 2015&lt;br /&gt;
**** are we ready&lt;br /&gt;
**** do we need to release&lt;br /&gt;
**** about 2017 we switch to time based releases, for both minor and major releases&lt;br /&gt;
*** RMT, in 2016&lt;br /&gt;
*** Committter selection, in 2015&lt;br /&gt;
**** private committers list&lt;br /&gt;
*** CoC, in 2016&lt;br /&gt;
**** initial idea was for core to do enforcement&lt;br /&gt;
**** now CoC does that&lt;br /&gt;
** One would think core doesn&#039;t have work after all that delegation&lt;br /&gt;
** Still lots of coordination / &amp;quot;cat herding&amp;quot;&lt;br /&gt;
** Important teams overlap with Core, CoCC is explicitly separate&lt;br /&gt;
** largely independent teams&lt;br /&gt;
*** Advocacy&lt;br /&gt;
*** Funds&lt;br /&gt;
** Questions:&lt;br /&gt;
*** Stacey: Core is self selecting, plans to change that?&lt;br /&gt;
**** Tom:&lt;br /&gt;
***** Not currently&lt;br /&gt;
***** Should definitely be long-term members for institutional memory&lt;br /&gt;
**** Bruce: Takes a while to get there, we were looking for people a few times, didn&#039;t work out&lt;br /&gt;
**** Robert: Self selecting is an issue, but not clear what the solution is&lt;br /&gt;
**** Dave: It&#039;s hard to model something resilient against takeover&lt;br /&gt;
**** Karen: At least we should be honest about this issue toward the community&lt;br /&gt;
**** Heikki: Community is very concensus drive, hard to make decision, but also good to not piss off people. Core team has been decent at that.&lt;br /&gt;
**** Tom: Policy that there is not more than 50% of one company&lt;br /&gt;
**** Robert: Feels awkward to be &amp;quot;steered&amp;quot; by a something as opaque&lt;br /&gt;
&lt;br /&gt;
== Security Team - Noah ==&lt;br /&gt;
&lt;br /&gt;
* 17 people&lt;br /&gt;
* receives reports of security issues&lt;br /&gt;
* issues come from three groups&lt;br /&gt;
** postgres devs&lt;br /&gt;
** people we haven&#039;t heard of, typically something operating automated scanner&lt;br /&gt;
*** our mailing lists are public, you know?!?&lt;br /&gt;
** occasionally reports by &amp;quot;real&amp;quot; security researchers&lt;br /&gt;
* fixes developed by&lt;br /&gt;
** reports&lt;br /&gt;
** security team members&lt;br /&gt;
** &amp;quot;outsourcing program&amp;quot;, to non-security member committers&lt;br /&gt;
* 7 security issues in the last year, one high risk one&lt;br /&gt;
* We are now a CNA&lt;br /&gt;
** CVEs are assigned for most vulnerabilities&lt;br /&gt;
** new: encouragement to become our own numbering authority&lt;br /&gt;
** why worthwhile: CVEs assigned by outside numbering authorities by other numbering authorities&lt;br /&gt;
** with CNA we&#039;re supposed to be asked first&lt;br /&gt;
** now can update metadata for old CVEs&lt;br /&gt;
** also now responsible for assigning CVEs in the wider postgres space&lt;br /&gt;
** also get asked about filling out security questionaire&lt;br /&gt;
* Question to audience: Problems with security model?&lt;br /&gt;
** Dave Cramer: Process more complicated than github&#039;s&lt;br /&gt;
*** tarballs are released, commit messages mails are suppressed, but everyone can look at commits&lt;br /&gt;
*** in theory we could make fix in private repo, like we did once before&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PostgreSQL Community Association - Steve Singer ==&lt;br /&gt;
&lt;br /&gt;
* Special purpose entitity to focus on intelectual property matters&lt;br /&gt;
* Maintain and protect assets (trademarks, domain names, not code)&lt;br /&gt;
* does not hold copyright on postgres code, held by individuals&lt;br /&gt;
* Canadian Not for Profit&lt;br /&gt;
* Board:&lt;br /&gt;
** Dave Page&lt;br /&gt;
** Steve Siunger&lt;br /&gt;
** Jonathan Katz&lt;br /&gt;
** Jaime Casanova&lt;br /&gt;
** Peter Eisentraut&lt;br /&gt;
** Marc Fournier&lt;br /&gt;
* self selecting membership, by board (past and present members)&lt;br /&gt;
** aware of issues around that&lt;br /&gt;
* Why:&lt;br /&gt;
** ensure fair use of PostgreSQL brand assets&lt;br /&gt;
** otherwise somebody else can call something postgres&lt;br /&gt;
** requires enforcement, otherwise trademark is abandoned and can&#039;t be enforced&lt;br /&gt;
** keep PG fre and open source&lt;br /&gt;
* Where:&lt;br /&gt;
** Canada&lt;br /&gt;
** US&lt;br /&gt;
** Europe&lt;br /&gt;
* How:&lt;br /&gt;
** controlled fair use allowed&lt;br /&gt;
** example: Brand names involving postgres need to be licensed&lt;br /&gt;
** standard license for templates, but often companies want modified terms&lt;br /&gt;
* Key Activities:&lt;br /&gt;
** Oppose Trademark Registrations&lt;br /&gt;
*** some conflicts around that are public, others not&lt;br /&gt;
** Ask that the trademarks be used properly&lt;br /&gt;
** License where needed&lt;br /&gt;
* Highlights&lt;br /&gt;
** Fundacion PostgreSQL conclusion (after three years and lots of money)&lt;br /&gt;
** Trademark oppositions, cease &amp;amp; desists&lt;br /&gt;
** Donor Recognition Program&lt;br /&gt;
* Why private?&lt;br /&gt;
** public statement can have legal consequences, need to be reviewed by lawyers, costs money for review&lt;br /&gt;
** rather work amiciably, rather than public shaming, often succeeds&lt;br /&gt;
** some unlicensed uses are because we didn&#039;t have the time/money to do something about them&lt;br /&gt;
* Financial highlights:&lt;br /&gt;
** Net loss: CAD 11k&lt;br /&gt;
** Goal: Improve financials via Donor recognition program&lt;br /&gt;
** Various levels that grant public recognition&lt;br /&gt;
* Question:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code of Conduct Committee - Eliza Benett ==&lt;br /&gt;
&lt;br /&gt;
* Eliza is chair since 2014&lt;br /&gt;
* Overview of the last year&lt;br /&gt;
** Representation:&lt;br /&gt;
*** 5 members, 3 male identifying, 2 female, plus chair&lt;br /&gt;
*** geographic spread: 2 from Canada, 1 from Asial, one american in Asia, 1 from Europe&lt;br /&gt;
*** Volunteers, selected by current members&lt;br /&gt;
*** How can group size be increased&lt;br /&gt;
** Activity&lt;br /&gt;
*** 8 complaints in 2023/24 (inappropriate conduct on community channels (2), at community events (2), non-community channel (3))&lt;br /&gt;
*** Outcomes: no violation (3), out of scope (2), corrective recommended and taken (2), corrective action recommended (1)&lt;br /&gt;
*** processing done by lead investigator, always with at least one other person&lt;br /&gt;
*** [couldn&#039;t keep up]&lt;br /&gt;
** Trends:&lt;br /&gt;
*** 2023/24 have been busy&lt;br /&gt;
*** Complaints on social media, [couldn&#039;t keep up]&lt;br /&gt;
** Opportunities:&lt;br /&gt;
*** need new members&lt;br /&gt;
*** update CoC policy, hasn&#039;t bene updated significantly since introduction&lt;br /&gt;
*** improve enforcement, appeals process&lt;br /&gt;
*** inform community events about CoC existance / use of CoC[C]&lt;br /&gt;
** Revisions:&lt;br /&gt;
*** Roles &amp;amp; responsibilities&lt;br /&gt;
*** Scope clarification&lt;br /&gt;
*** Appeals process&lt;br /&gt;
*** Record sharing and retention, records exist since 2019 (unsure)&lt;br /&gt;
*** Communication processes&lt;br /&gt;
*** ....&lt;br /&gt;
*** proposed timeline: Summer 2024, engegement on policy revisions, September: 2024, in effect&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Port report - Thomas Munro ==&lt;br /&gt;
&lt;br /&gt;
* lots of platform that postgres used to run on, but doesn&#039;t anymore&lt;br /&gt;
* still support about 11 platforms&lt;br /&gt;
* most users on linux, some on windows, the rest probably miniscule&lt;br /&gt;
* Robert Haas and Devrim Gunduz think there are way more on windows than Thomas guessed&lt;br /&gt;
* Dave Page says some windows apps embed postgres&lt;br /&gt;
* Estimate about problem per platform, overwhelmingly windows&lt;br /&gt;
** Robert: Lots of it just perl crap&lt;br /&gt;
* Highlights:&lt;br /&gt;
** AIX was dropped in 2017, suddenly IBM folks appeared, rely on Postgres&lt;br /&gt;
*** AIX is weird, unusual linker/object format&lt;br /&gt;
*** Old OS versions in buildfarm&lt;br /&gt;
*** Vendor compiler requires extra work&lt;br /&gt;
**** some bugs got fixed&lt;br /&gt;
** HP-UX was dropped in 16&lt;br /&gt;
*** no real complaints, one mention&lt;br /&gt;
** Solaris &amp;lt;= 11.3 in 17 was dropped&lt;br /&gt;
*** solaris is less painful&lt;br /&gt;
*** user interest, solaris buildfarm animals by users&lt;br /&gt;
*** also illumos&lt;br /&gt;
*** they stopped increasing versions after 11.4&lt;br /&gt;
**** should we drop support for the sunpro compiler?&lt;br /&gt;
*** won&#039;t support newer things like direct-io&lt;br /&gt;
** FreeBSD:&lt;br /&gt;
*** Short supported version window, buildfarm animals exist that are very old&lt;br /&gt;
** OpenBSD:&lt;br /&gt;
*** uses libressl&lt;br /&gt;
** Linux+musl&lt;br /&gt;
*** different libc, a few incompatibilities that we have to deal with&lt;br /&gt;
*** Have a buildfarm animal now&lt;br /&gt;
** Windows:&lt;br /&gt;
*** Removed old perl based build system, did make things easier&lt;br /&gt;
*** Thomas never used windows, despite working for Microsoft&lt;br /&gt;
*** Locale support is very instable, breaks frequently&lt;br /&gt;
**** particularly with turkish locale, breaks all PG databases with the locale, but also some others&lt;br /&gt;
*** truncations fail occasionally&lt;br /&gt;
**** causes corruptions&lt;br /&gt;
*** Socket event loss, causes weird problems&lt;br /&gt;
*** Thomas tries to fix things, but doesn&#039;t use windows, hard to find testing&lt;br /&gt;
*** Thomas finds our state of windows support embarassing&lt;br /&gt;
*** We ought to make some decisions to improve the situation, requires making dropping some filesystems&lt;br /&gt;
**** who makes decision?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Group 1 ==&lt;br /&gt;
&lt;br /&gt;
* Action item: bugtracker&lt;br /&gt;
** Presented by Matthias Van de Meent&lt;br /&gt;
** would be useful to have a bug-manager responsibility, likely longer than a CFM&lt;br /&gt;
** no agreement: add feature to track a commitfest entry for threads without patches&lt;br /&gt;
** Same topic was also discussed by Group 4 (Peter Eisentraut)&lt;br /&gt;
*** We agreed that we should have one&lt;br /&gt;
*** Who would curate? Hire somebody?&lt;br /&gt;
*** What software to use? Gitlab?&lt;br /&gt;
** Melanie: Is it it really a technical problem?&lt;br /&gt;
** Andres: We seem to have started having agreement on having a bugtracker, that&#039;s different than in the past&lt;br /&gt;
** Heikki: Some tracking would be useful, even if dumping ground&lt;br /&gt;
** Robert: Relying on bugtracking / CF tracking person doing all the work on summarizing huge threads can&#039;t scale&lt;br /&gt;
** Melanie: Fixing bugs is more important than new features&lt;br /&gt;
** Bharat: Authors should summarize state in commit messages, several agreeing with that (Noah, Steve, Robert)&lt;br /&gt;
** Robert: How to balance responsiblity to deal with bugreports and feature work&lt;br /&gt;
** Melanie: Responsiblity of somebody doing triage would not be in-depth work, just high level triage&lt;br /&gt;
** Alvaro: Just wishing there weren&#039;t bug doesn&#039;t work&lt;br /&gt;
** Jelte: Knowing about many people are affected is useful&lt;br /&gt;
&lt;br /&gt;
* Action item: tooling&lt;br /&gt;
** More developer oriented tooling are required, including things like pull request&lt;br /&gt;
** Platforms like github are problematic due to restrictions imposed by companies (e.g. github was restricted in Iran for a while)&lt;br /&gt;
** we could use a hosted gitlab, or hosted by other open source project&lt;br /&gt;
** Matthias: Platform notifications are hard to use&lt;br /&gt;
** Robert: Real problem is changing the workflow&lt;br /&gt;
** Andreas: We could have patch review events, to get more people involved?&lt;br /&gt;
** Jonathan: Similar to python sprints&lt;br /&gt;
** Robert: That&#039;s likely not solving problems with complicated patches&lt;br /&gt;
** Andreas: Could do something like docs on a separate platform&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Group 4 ==&lt;br /&gt;
&lt;br /&gt;
* Presented by Peter Eisentraut&lt;br /&gt;
&lt;br /&gt;
* Action item: Windows port&lt;br /&gt;
** Few / no core developers really care about windows port&lt;br /&gt;
** Users are less sophisticated and communicate less&lt;br /&gt;
** Andrew Dunstan would look at one of the pending technical issues&lt;br /&gt;
** Problem areas&lt;br /&gt;
*** locale support - default to windows?&lt;br /&gt;
*** what&#039;s with refs - it doesn&#039;t support posix mode&lt;br /&gt;
** Heikki: Should we just drop windows, similar to AIX&lt;br /&gt;
** Robert: Bugs like the windows corruption issue is not enough reason to drop support, sometimes we just have bugs&lt;br /&gt;
&lt;br /&gt;
* Action item: Freeze policy&lt;br /&gt;
** Peter and Matthias&lt;br /&gt;
** Group thought that this year was an anomaly, doesn&#039;t necessarily need a large scale change&lt;br /&gt;
** Encourage more incremental work, don&#039;t require perfection, leading to pushing very late in cycle&lt;br /&gt;
*** Prioritize architecture of details like default values&lt;br /&gt;
** Impact on feature freeze on release cycle&lt;br /&gt;
*** Branch earlier, to not have to postpone as much, group didn&#039;t really have agreement&lt;br /&gt;
*** Melanie: Issues with backporting, focus on stability&lt;br /&gt;
*** Matthias: Doesn&#039;t see a point reviewing during feature freeze&lt;br /&gt;
*** Robert: Committer authored patches are part of the problem, authors have control over time&lt;br /&gt;
*** Vik Faering: Once stable branch is forked, nobody cares about stable branch&lt;br /&gt;
*** Tom: Agrees&lt;br /&gt;
*** Matthias: Can strike balance, by moving branch up a month or such&lt;br /&gt;
*** Robert: One question is if there are more reverts, that&#039;s bad after the branch&lt;br /&gt;
*** Jonathan: Not convinced that that&#039;s really the issue, we had important fixes late&lt;br /&gt;
*** Robert: Not really addressing the issue of large stuff late in the cycle&lt;br /&gt;
*** Matthias: Still a problem not being able to get anything in&lt;br /&gt;
*** Melanie: Don&#039;t think many agree with you&lt;br /&gt;
&lt;br /&gt;
* Action item: yubikeys for committing&lt;br /&gt;
** no agreement on forcing, but encouraging is ok&lt;br /&gt;
** laptop security etc would be good&lt;br /&gt;
&lt;br /&gt;
* Action item: Tooling&lt;br /&gt;
** Should be easier to find patches that e.g. have tests that never worked, similar tooling things&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Group 2 ==&lt;br /&gt;
&lt;br /&gt;
* Presented by: Andreas Scherbaum&lt;br /&gt;
&lt;br /&gt;
* Action item: Exhibition Effort&lt;br /&gt;
** we&#039;re not showing up at enough non-PG conferences&lt;br /&gt;
** Jonathan: PGUS has some funding, but are not covering that much&lt;br /&gt;
** More efforts to support groups like pgWomen&lt;br /&gt;
** consider having an application developer oriented conferences&lt;br /&gt;
&lt;br /&gt;
*** Stacey: At conferences like djangocon people say they like postgres, but feel like postgres conferes aren&#039;t &amp;quot;for them&amp;quot;.&lt;br /&gt;
*** Stacey: Perhaps collaborating with conferences like djangocon would help reach people and then get them to postgres&lt;br /&gt;
** People should submit talks at more conferes&lt;br /&gt;
&lt;br /&gt;
* Action item: SPI&lt;br /&gt;
&lt;br /&gt;
** Jonathan: SPI is opaque, we don&#039;t know how much money we have, we get money from donations&lt;br /&gt;
** Heikki: Why is SPI not funding pgca&lt;br /&gt;
** Steve: SPI is very complicated to deal with, partially due to being out of the country, partially just SPI being SPI&lt;br /&gt;
** Jonathan: SPI didn&#039;t give money for pgconf.dev, that should have been easy&lt;br /&gt;
** Alvaro: Could SPI pay for a bug manager, agreement in audience&lt;br /&gt;
** Robert: Companies could also provide staff tracking for &lt;br /&gt;
&lt;br /&gt;
* Action item: Benchmarking&lt;br /&gt;
** TPC is still relevant&lt;br /&gt;
** Better testing needed&lt;br /&gt;
** Find way to run meaningful test with every relevant patch&lt;br /&gt;
** Jonathan: There&#039;s lots of money in the postgres world, there should be money for better testing&lt;br /&gt;
&lt;br /&gt;
* Action item: Commitfest&lt;br /&gt;
** Not enough reviewers, need more&lt;br /&gt;
** Idea: review events&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Group 3 ==&lt;br /&gt;
&lt;br /&gt;
* Presented by: Jeff Davis&lt;br /&gt;
&lt;br /&gt;
* Action item: Protocol changes&lt;br /&gt;
** Which features do we want?&lt;br /&gt;
** How do we introduce changes, dealing with breakages?&lt;br /&gt;
*** new protocol version?&lt;br /&gt;
*** optional features?&lt;br /&gt;
** Desired features&lt;br /&gt;
*** Compression&lt;br /&gt;
*** Proxies and conneciton poolers&lt;br /&gt;
*** Transparent column encryption&lt;br /&gt;
*** Pgpool would like to have sequence numbers&lt;br /&gt;
** Required vs optional features&lt;br /&gt;
*** Depends on implementation complexity on the driver side?&lt;br /&gt;
** Concerns around&lt;br /&gt;
*** too partial solutions&lt;br /&gt;
*** genericity introducing unnecessary roundtrips&lt;br /&gt;
*** concerns about breakages&lt;br /&gt;
** Robert: How do we put various efforts into something coherent&lt;br /&gt;
&lt;br /&gt;
* Action item: Surprising behavior around roles and privileges&lt;br /&gt;
** Some of this is user hostile&lt;br /&gt;
** Users can&#039;t control what code is executed with their privileges&lt;br /&gt;
** Function authors don&#039;t know what their function will do&lt;br /&gt;
*** requires setting search_path, but most won&#039;t&lt;br /&gt;
** There&#039;s no way to drop privileges&lt;br /&gt;
*** SET SESSION AUTHORIZATION and SET ROLE can be undone via RESET SESSION AUTHORIZATON&lt;br /&gt;
** Hacks and special cases&lt;br /&gt;
*** e.g. around table maintenance tasks like REINDEX and logical replication&lt;br /&gt;
**** it&#039;s safe to reindex, but not safe to insert&lt;br /&gt;
** We define a lot of these to not be security issues, but they often are for users.&lt;br /&gt;
*** We don&#039;t even document much of this&lt;br /&gt;
** Noah: Is it really a problem, we document this?&lt;br /&gt;
** Jeff: Yes, we document this just for security definer, but it&#039;s also a problem in other situations&lt;br /&gt;
** Noah: Now agree&lt;br /&gt;
** Concensus: People other than Robert and Jeff need to get involved, including at some point agreeing to do something&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PgCon_2024_Developer_Meeting&amp;diff=39069</id>
		<title>PgCon 2024 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PgCon_2024_Developer_Meeting&amp;diff=39069"/>
		<updated>2024-05-28T20:07:00Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Minutes =&lt;br /&gt;
&lt;br /&gt;
Rough, I (Andres) was delegated this because I was a few minutes late :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Operations and Governance - Jonathan Katz ==&lt;br /&gt;
&lt;br /&gt;
* Lots of committees aren&#039;t known even by people involved in the project&lt;br /&gt;
* Joe Conway plans to create a committee website&lt;br /&gt;
* Lots of independently moving parts of the project&lt;br /&gt;
** partially intentionally done that way, for resilience to takeover&lt;br /&gt;
** also an obstruction to transparency&lt;br /&gt;
* Teams:&lt;br /&gt;
** Core Team - &amp;quot;last resort&amp;quot;, conflicts etc&lt;br /&gt;
** Committers - code obviously, plenty policy around that&lt;br /&gt;
** Pginfra - manages all the postgres infrastructure, servers for git etc&lt;br /&gt;
** Code of Conduct Committee * Deal with violations of the CoC&lt;br /&gt;
** Security 0 deal with security issues in our code&lt;br /&gt;
*** CNA  we can now assign our own CVEs&lt;br /&gt;
** Release - manage releases of postgres&lt;br /&gt;
*** RMT&lt;br /&gt;
*** Press&lt;br /&gt;
** Translators&lt;br /&gt;
** Packaging - build binary packages of postgres&lt;br /&gt;
** Press&lt;br /&gt;
** Planet&lt;br /&gt;
** pg.org moderation&lt;br /&gt;
** pgweb&lt;br /&gt;
** twitter etc&lt;br /&gt;
** Contributors team&lt;br /&gt;
** Funds&lt;br /&gt;
** GSCOC&lt;br /&gt;
** PGCA * Trademark etc&lt;br /&gt;
** Postgres Women&lt;br /&gt;
** Funds Groups&lt;br /&gt;
** Events Canada, organizing this conference&lt;br /&gt;
** I missed transcribing some, Jonathan missed listing some&lt;br /&gt;
* Amazing that it works, but it also often doesn&#039;t&lt;br /&gt;
* Robert: Really important to have list public, for volunteers to be able to oin&lt;br /&gt;
* Karen Jax: staffing, not manning teams&lt;br /&gt;
* Joe: Quick recap of the plans for listing of the teams on the website&lt;br /&gt;
** some teams already have pages, but there&#039;s no coherent way to find those&lt;br /&gt;
** have index with brief description and links to pages&lt;br /&gt;
&lt;br /&gt;
== Core Team - Tom Lane ==&lt;br /&gt;
&lt;br /&gt;
* At Berkeley, Postgres then Postgres 95, a few outside users&lt;br /&gt;
* Marc Fournier volunteered to host development&lt;br /&gt;
* Initial Core Team:&lt;br /&gt;
** 1996:&lt;br /&gt;
*** Mark Fournier&lt;br /&gt;
*** Bruce Mojian&lt;br /&gt;
*** Bryan Henderson&lt;br /&gt;
** 1998:&lt;br /&gt;
*** Jan Wiek&lt;br /&gt;
*** Tom Lane&lt;br /&gt;
* Initially did nearly all the work&lt;br /&gt;
* Early additional responsibility:&lt;br /&gt;
** releases&lt;br /&gt;
** infrastructure&lt;br /&gt;
** committter selection&lt;br /&gt;
* Additional responsibility&lt;br /&gt;
** Liaison&lt;br /&gt;
** Security&lt;br /&gt;
** Trademark&lt;br /&gt;
** really because ther wasn&#039;t anybody else&lt;br /&gt;
* Core never did:&lt;br /&gt;
** Website&lt;br /&gt;
** Advocacy&lt;br /&gt;
** Fundraising&lt;br /&gt;
* 2000: Landmark / Great Bridge&lt;br /&gt;
** started a postgres services company&lt;br /&gt;
** closed in .com bust&lt;br /&gt;
** Asked: How can this be done well with the community?&lt;br /&gt;
*** Not enough bandwidth / experience in core *&amp;gt; delegate&lt;br /&gt;
** Delegate:&lt;br /&gt;
*** security, in 2007&lt;br /&gt;
*** pginfra, in 2011&lt;br /&gt;
**** took over more incrementally&lt;br /&gt;
**** Tom doesn&#039;t remember all the details&lt;br /&gt;
**** some small preexisting responsibilities&lt;br /&gt;
*** Trademark issues&lt;br /&gt;
**** PgCAC, formally incorporated NPO&lt;br /&gt;
*** Release, in 2015&lt;br /&gt;
**** are we ready&lt;br /&gt;
**** do we need to release&lt;br /&gt;
**** about 2017 we switch to time based releases, for both minor and major releases&lt;br /&gt;
*** RMT, in 2016&lt;br /&gt;
*** Committter selection, in 2015&lt;br /&gt;
**** private committers list&lt;br /&gt;
*** CoC, in 2016&lt;br /&gt;
**** initial idea was for core to do enforcement&lt;br /&gt;
**** now CoC does that&lt;br /&gt;
** One would think core doesn&#039;t have work after all that delegation&lt;br /&gt;
** Still lots of coordination / &amp;quot;cat herding&amp;quot;&lt;br /&gt;
** Important teams overlap with Core, CoCC is explicitly separate&lt;br /&gt;
** largely independent teams&lt;br /&gt;
*** Advocacy&lt;br /&gt;
*** Funds&lt;br /&gt;
** Questions:&lt;br /&gt;
*** Stacey: Core is self selecting, plans to change that?&lt;br /&gt;
**** Tom:&lt;br /&gt;
***** Not currently&lt;br /&gt;
***** Should definitely be long-term members for institutional memory&lt;br /&gt;
**** Bruce: Takes a while to get there, we were looking for people a few times, didn&#039;t work out&lt;br /&gt;
**** Robert: Self selecting is an issue, but not clear what the solution is&lt;br /&gt;
**** Dave: It&#039;s hard to model something resilient against takeover&lt;br /&gt;
**** Karen: At least we should be honest about this issue toward the community&lt;br /&gt;
**** Heikki: Community is very concensus drive, hard to make decision, but also good to not piss off people. Core team has been decent at that.&lt;br /&gt;
**** Tom: Policy that there is not more than 50% of one company&lt;br /&gt;
**** Robert: Feels awkward to be &amp;quot;steered&amp;quot; by a something as opaque&lt;br /&gt;
&lt;br /&gt;
== Security Team - Noah ==&lt;br /&gt;
&lt;br /&gt;
* 17 people&lt;br /&gt;
* receives reports of security issues&lt;br /&gt;
* issues come from three groups&lt;br /&gt;
** postgres devs&lt;br /&gt;
** people we haven&#039;t heard of, typically something operating automated scanner&lt;br /&gt;
*** our mailing lists are public, you know?!?&lt;br /&gt;
** occasionally reports by &amp;quot;real&amp;quot; security researchers&lt;br /&gt;
* fixes developed by&lt;br /&gt;
** reports&lt;br /&gt;
** security team members&lt;br /&gt;
** &amp;quot;outsourcing program&amp;quot;, to non-security member committers&lt;br /&gt;
* 7 security issues in the last year, one high risk one&lt;br /&gt;
* We are now a CNA&lt;br /&gt;
** CVEs are assigned for most vulnerabilities&lt;br /&gt;
** new: encouragement to become our own numbering authority&lt;br /&gt;
** why worthwhile: CVEs assigned by outside numbering authorities by other numbering authorities&lt;br /&gt;
** with CNA we&#039;re supposed to be asked first&lt;br /&gt;
** now can update metadata for old CVEs&lt;br /&gt;
** also now responsible for assigning CVEs in the wider postgres space&lt;br /&gt;
** also get asked about filling out security questionaire&lt;br /&gt;
* Question to audience: Problems with security model?&lt;br /&gt;
** Dave Cramer: Process more complicated than github&#039;s&lt;br /&gt;
*** tarballs are released, commit messages mails are suppressed, but everyone can look at commits&lt;br /&gt;
*** in theory we could make fix in private repo, like we did once before&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PostgreSQL Community Association - Steve Singer ==&lt;br /&gt;
&lt;br /&gt;
* Special purpose entitity to focus on intelectual property matters&lt;br /&gt;
* Maintain and protect assets (trademarks, domain names, not code)&lt;br /&gt;
* does not hold copyright on postgres code, held by individuals&lt;br /&gt;
* Canadian Not for Profit&lt;br /&gt;
* Board:&lt;br /&gt;
** Dave Page&lt;br /&gt;
** Steve Siunger&lt;br /&gt;
** Jonathan Katz&lt;br /&gt;
** Jaime Casanova&lt;br /&gt;
** Peter Eisentraut&lt;br /&gt;
** Marc Fournier&lt;br /&gt;
* self selecting membership, by board (past and present members)&lt;br /&gt;
** aware of issues around that&lt;br /&gt;
* Why:&lt;br /&gt;
** ensure fair use of PostgreSQL brand assets&lt;br /&gt;
** otherwise somebody else can call something postgres&lt;br /&gt;
** requires enforcement, otherwise trademark is abandoned and can&#039;t be enforced&lt;br /&gt;
** keep PG fre and open source&lt;br /&gt;
* Where:&lt;br /&gt;
** Canada&lt;br /&gt;
** US&lt;br /&gt;
** Europe&lt;br /&gt;
* How:&lt;br /&gt;
** controlled fair use allowed&lt;br /&gt;
** example: Brand names involving postgres need to be licensed&lt;br /&gt;
** standard license for templates, but often companies want modified terms&lt;br /&gt;
* Key Activities:&lt;br /&gt;
** Oppose Trademark Registrations&lt;br /&gt;
*** some conflicts around that are public, others not&lt;br /&gt;
** Ask that the trademarks be used properly&lt;br /&gt;
** License where needed&lt;br /&gt;
* Highlights&lt;br /&gt;
** Fundacion PostgreSQL conclusion (after three years and lots of money)&lt;br /&gt;
** Trademark oppositions, cease &amp;amp; desists&lt;br /&gt;
** Donor Recognition Program&lt;br /&gt;
* Why private?&lt;br /&gt;
** public statement can have legal consequences, need to be reviewed by lawyers, costs money for review&lt;br /&gt;
** rather work amiciably, rather than public shaming, often succeeds&lt;br /&gt;
** some unlicensed uses are because we didn&#039;t have the time/money to do something about them&lt;br /&gt;
* Financial highlights:&lt;br /&gt;
** Net loss: CAD 11k&lt;br /&gt;
** Goal: Improve financials via Donor recognition program&lt;br /&gt;
** Various levels that grant public recognition&lt;br /&gt;
* Question:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code of Conduct Committee - Eliza Benett ==&lt;br /&gt;
&lt;br /&gt;
* Eliza is chair since 2014&lt;br /&gt;
* Overview of the last year&lt;br /&gt;
** Representation:&lt;br /&gt;
*** 5 members, 3 male identifying, 2 female, plus chair&lt;br /&gt;
*** geographic spread: 2 from Canada, 1 from Asial, one american in Asia, 1 from Europe&lt;br /&gt;
*** Volunteers, selected by current members&lt;br /&gt;
*** How can group size be increased&lt;br /&gt;
** Activity&lt;br /&gt;
*** 8 complaints in 2023/24 (inappropriate conduct on community channels (2), at community events (2), non-community channel (3))&lt;br /&gt;
*** Outcomes: no violation (3), out of scope (2), corrective recommended and taken (2), corrective action recommended (1)&lt;br /&gt;
*** processing done by lead investigator, always with at least one other person&lt;br /&gt;
*** [couldn&#039;t keep up]&lt;br /&gt;
** Trends:&lt;br /&gt;
*** 2023/24 have been busy&lt;br /&gt;
*** Complaints on social media, [couldn&#039;t keep up]&lt;br /&gt;
** Opportunities:&lt;br /&gt;
*** need new members&lt;br /&gt;
*** update CoC policy, hasn&#039;t bene updated significantly since introduction&lt;br /&gt;
*** improve enforcement, appeals process&lt;br /&gt;
*** inform community events about CoC existance / use of CoC[C]&lt;br /&gt;
** Revisions:&lt;br /&gt;
*** Roles &amp;amp; responsibilities&lt;br /&gt;
*** Scope clarification&lt;br /&gt;
*** Appeals process&lt;br /&gt;
*** Record sharing and retention, records exist since 2019 (unsure)&lt;br /&gt;
*** Communication processes&lt;br /&gt;
*** ....&lt;br /&gt;
*** proposed timeline: Summer 2024, engegement on policy revisions, September: 2024, in effect&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Port report - Thomas Munro ==&lt;br /&gt;
&lt;br /&gt;
* lots of platform that postgres used to run on, but doesn&#039;t anymore&lt;br /&gt;
* still support about 11 platforms&lt;br /&gt;
* most users on linux, some on windows, the rest probably miniscule&lt;br /&gt;
* Robert Haas and Devrim Gunduz think there are way more on windows than Thomas guessed&lt;br /&gt;
* Dave Page says some windows apps embed postgres&lt;br /&gt;
* Estimate about problem per platform, overwhelmingly windows&lt;br /&gt;
** Robert: Lots of it just perl crap&lt;br /&gt;
* Highlights:&lt;br /&gt;
** AIX was dropped in 2017, suddenly IBM folks appeared, rely on Postgres&lt;br /&gt;
*** AIX is weird, unusual linker/object format&lt;br /&gt;
*** Old OS versions in buildfarm&lt;br /&gt;
*** Vendor compiler requires extra work&lt;br /&gt;
**** some bugs got fixed&lt;br /&gt;
** HP-UX was dropped in 16&lt;br /&gt;
*** no real complaints, one mention&lt;br /&gt;
** Solaris &amp;lt;= 11.3 in 17 was dropped&lt;br /&gt;
*** solaris is less painful&lt;br /&gt;
*** user interest, solaris buildfarm animals by users&lt;br /&gt;
*** also illumos&lt;br /&gt;
*** they stopped increasing versions after 11.4&lt;br /&gt;
**** should we drop support for the sunpro compiler?&lt;br /&gt;
*** won&#039;t support newer things like direct-io&lt;br /&gt;
** FreeBSD:&lt;br /&gt;
*** Short supported version window, buildfarm animals exist that are very old&lt;br /&gt;
** OpenBSD:&lt;br /&gt;
*** uses libressl&lt;br /&gt;
** Linux+musl&lt;br /&gt;
*** different libc, a few incompatibilities that we have to deal with&lt;br /&gt;
*** Have a buildfarm animal now&lt;br /&gt;
** Windows:&lt;br /&gt;
*** Removed old perl based build system, did make things easier&lt;br /&gt;
*** Thomas never used windows, despite working for Microsoft&lt;br /&gt;
*** Locale support is very instable, breaks frequently&lt;br /&gt;
**** particularly with turkish locale, breaks all PG databases with the locale, but also some others&lt;br /&gt;
*** truncations fail occasionally&lt;br /&gt;
**** causes corruptions&lt;br /&gt;
*** Socket event loss, causes weird problems&lt;br /&gt;
*** Thomas tries to fix things, but doesn&#039;t use windows, hard to find testing&lt;br /&gt;
*** Thomas finds our state of windows support embarassing&lt;br /&gt;
*** We ought to make some decisions to improve the situation, requires making dropping some filesystems&lt;br /&gt;
**** who makes decision?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Group 1 ==&lt;br /&gt;
&lt;br /&gt;
* Action item: bugtracker&lt;br /&gt;
** Presented by Matthias Van de Meent&lt;br /&gt;
** would be useful to have a bug-manager responsibility, likely longer than a CFM&lt;br /&gt;
** no agreement: add feature to track a commitfest entry for threads without patches&lt;br /&gt;
** Same topic was also discussed by Group 4 (Peter Eisentraut)&lt;br /&gt;
*** We agreed that we should have one&lt;br /&gt;
*** Who would curate? Hire somebody?&lt;br /&gt;
*** What software to use? Gitlab?&lt;br /&gt;
** Melanie: Is it it really a technical problem?&lt;br /&gt;
** Andres: We seem to have started having agreement on having a bugtracker, that&#039;s different than in the past&lt;br /&gt;
** Heikki: Some tracking would be useful, even if dumping ground&lt;br /&gt;
** Robert: Relying on bugtracking / CF tracking person doing all the work on summarizing huge threads can&#039;t scale&lt;br /&gt;
** Melanie: Fixing bugs is more important than new features&lt;br /&gt;
** Bharat: Authors should summarize state in commit messages, several agreeing with that (Noah, Steve, Robert)&lt;br /&gt;
** Robert: How to balance responsiblity to deal with bugreports and feature work&lt;br /&gt;
** Melanie: Responsiblity of somebody doing triage would not be in-depth work, just high level triage&lt;br /&gt;
** Alvaro: Just wishing there weren&#039;t bug doesn&#039;t work&lt;br /&gt;
** Jelte: Knowing about many people are affected is useful&lt;br /&gt;
&lt;br /&gt;
* Action item: tooling&lt;br /&gt;
** More developer oriented tooling are required, including things like pull request&lt;br /&gt;
** Platforms like github are problematic due to restrictions imposed by companies (e.g. github was restricted in Iran for a while)&lt;br /&gt;
** we could use a hosted gitlab, or hosted by other open source project&lt;br /&gt;
** Matthias: Platform notifications are hard to use&lt;br /&gt;
** Robert: Real problem is changing the workflow&lt;br /&gt;
** Andreas: We could have patch review events, to get more people involved?&lt;br /&gt;
** Jonathan: Similar to python sprints&lt;br /&gt;
** Robert: That&#039;s likely not solving problems with complicated patches&lt;br /&gt;
** Andreas: Could do something like docs on a separate platform&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Group 4 ==&lt;br /&gt;
&lt;br /&gt;
* Presented by Peter Eisentraut&lt;br /&gt;
&lt;br /&gt;
* Action item: Windows port&lt;br /&gt;
** Few / no core developers really care about windows port&lt;br /&gt;
** Users are less sophisticated and communicate less&lt;br /&gt;
** Andrew Dunstan would look at one of the pending technical issues&lt;br /&gt;
** Problem areas&lt;br /&gt;
*** locale support - default to windows?&lt;br /&gt;
*** what&#039;s with refs - it doesn&#039;t support posix mode&lt;br /&gt;
** Heikki: Should we just drop windows, similar to AIX&lt;br /&gt;
** Robert: Bugs like the windows corruption issue is not enough reason to drop support, sometimes we just have bugs&lt;br /&gt;
&lt;br /&gt;
* Action item: Freeze policy&lt;br /&gt;
** Peter and Matthias&lt;br /&gt;
** Group thought that this year was an anomaly, doesn&#039;t necessarily need a large scale change&lt;br /&gt;
** Encourage more incremental work, don&#039;t require perfection, leading to pushing very late in cycle&lt;br /&gt;
*** Prioritize architecture of details like default values&lt;br /&gt;
** Impact on feature freeze on release cycle&lt;br /&gt;
*** Branch earlier, to not have to postpone as much, group didn&#039;t really have agreement&lt;br /&gt;
*** Melanie: Issues with backporting, focus on stability&lt;br /&gt;
*** Matthias: Doesn&#039;t see a point reviewing during feature freeze&lt;br /&gt;
*** Robert: Committer authored patches are part of the problem, authors have control over time&lt;br /&gt;
*** Vik Faering: Once stable branch is forked, nobody cares about stable branch&lt;br /&gt;
*** Tom: Agrees&lt;br /&gt;
*** Matthias: Can strike balance, by moving branch up a month or such&lt;br /&gt;
*** Robert: One question is if there are more reverts, that&#039;s bad after the branch&lt;br /&gt;
*** Jonathan: Not convinced that that&#039;s really the issue, we had important fixes late&lt;br /&gt;
*** Robert: Not really addressing the issue of large stuff late in the cycle&lt;br /&gt;
*** Matthias: Still a problem not being able to get anything in&lt;br /&gt;
*** Melanie: Don&#039;t think many agree with you&lt;br /&gt;
&lt;br /&gt;
* Action item: yubikeys for committing&lt;br /&gt;
** no agreement on forcing, but encouraging is ok&lt;br /&gt;
** laptop security etc would be good&lt;br /&gt;
&lt;br /&gt;
* Action item: Tooling&lt;br /&gt;
** Should be easier to find patches that e.g. have tests that never worked, similar tooling things&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Group 2 ==&lt;br /&gt;
&lt;br /&gt;
* Presented by: Andreas Scherbaum&lt;br /&gt;
&lt;br /&gt;
* Action item: Exhibition Effort&lt;br /&gt;
** we&#039;re not showing up at enough non-PG conferences&lt;br /&gt;
** Jonathan: PGUS has some funding, but are not covering that much&lt;br /&gt;
** More efforts to support groups like pgWomen&lt;br /&gt;
** consider having an application developer oriented conferences&lt;br /&gt;
&lt;br /&gt;
*** Stacey: At conferences like djangocon people say they like postgres, but feel like postgres conferes aren&#039;t &amp;quot;for them&amp;quot;.&lt;br /&gt;
*** Stacey: Perhaps collaborating with conferences like djangocon would help reach people and then get them to postgres&lt;br /&gt;
** People should submit talks at more conferes&lt;br /&gt;
&lt;br /&gt;
* Action item: SPI&lt;br /&gt;
&lt;br /&gt;
** Jonathan: SPI is opaque, we don&#039;t know how much money we have, we get money from donations&lt;br /&gt;
** Heikki: Why is SPI not funding pgca&lt;br /&gt;
** Steve: SPI is very complicated to deal with, partially due to being out of the country, partially just SPI being SPI&lt;br /&gt;
** Jonathan: SPI didn&#039;t give money for pgconf.dev, that should have been easy&lt;br /&gt;
** Alvaro: Could SPI pay for a bug manager, agreement in audience&lt;br /&gt;
** Robert: Companies could also provide staff tracking for &lt;br /&gt;
&lt;br /&gt;
* Action item: Benchmarking&lt;br /&gt;
** TPC is still relevant&lt;br /&gt;
** Better testing needed&lt;br /&gt;
** Find way to run meaningful test with every relevant patch&lt;br /&gt;
** Jonathan: There&#039;s lots of money in the postgres world, there should be money for better testing&lt;br /&gt;
&lt;br /&gt;
* Action item: Commitfest&lt;br /&gt;
** Not enough reviewers, need more&lt;br /&gt;
** Idea: review events&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Group 3 ==&lt;br /&gt;
&lt;br /&gt;
* Presented by: Jeff Davis&lt;br /&gt;
&lt;br /&gt;
* Action item: Protocol changes&lt;br /&gt;
** Which features do we want?&lt;br /&gt;
** How do we introduce changes, dealing with breakages?&lt;br /&gt;
*** new protocol version?&lt;br /&gt;
*** optional features?&lt;br /&gt;
** Desired features&lt;br /&gt;
*** Compression&lt;br /&gt;
*** Proxies and conneciton poolers&lt;br /&gt;
*** Transparent column encryption&lt;br /&gt;
*** Pgpool would like to have sequence numbers&lt;br /&gt;
** Required vs optional features&lt;br /&gt;
*** Depends on implementation complexity on the driver side?&lt;br /&gt;
** Concerns around&lt;br /&gt;
*** too partial solutions&lt;br /&gt;
*** genericity introducing unnecessary roundtrips&lt;br /&gt;
*** concerns about breakages&lt;br /&gt;
** Robert: How do we put various efforts into something coherent&lt;br /&gt;
&lt;br /&gt;
* Action item: Surprising behavior around roles and privileges&lt;br /&gt;
** Some of this is user hostile&lt;br /&gt;
** Users can&#039;t control what code is executed with their privileges&lt;br /&gt;
** Function authors don&#039;t know what their function will do&lt;br /&gt;
*** requires setting search_path, but most won&#039;t&lt;br /&gt;
** There&#039;s no way to drop privileges&lt;br /&gt;
*** SET SESSION AUTHORIZATION and SET ROLE can be undone via RESET SESSION AUTHORIZATON&lt;br /&gt;
** Hacks and special cases&lt;br /&gt;
*** e.g. around table maintenance tasks like REINDEX and logical replication&lt;br /&gt;
**** it&#039;s safe to reindex, but not safe to insert&lt;br /&gt;
** We define a lot of these to not be security issues, but they often are for users.&lt;br /&gt;
*** We don&#039;t even document much of this&lt;br /&gt;
** Noah: Is it really a problem, we document this?&lt;br /&gt;
** Jeff: Yes, we document this just for security definer, but it&#039;s also a problem in other situations&lt;br /&gt;
** Noah: Now agree&lt;br /&gt;
** Concensus: People other than Robert and Jeff need to get involved, including at some point agreeing to do something&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PgCon_2024_Developer_Meeting&amp;diff=39068</id>
		<title>PgCon 2024 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PgCon_2024_Developer_Meeting&amp;diff=39068"/>
		<updated>2024-05-28T17:39:19Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: Created page with &amp;quot;= Minutes =  Rough, I (Andres) was delegated this because I was a few minutes late :)   == Operations and Governance - Jonathan Katz ==  * Lots of committees aren&amp;#039;t known even...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Minutes =&lt;br /&gt;
&lt;br /&gt;
Rough, I (Andres) was delegated this because I was a few minutes late :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Operations and Governance - Jonathan Katz ==&lt;br /&gt;
&lt;br /&gt;
* Lots of committees aren&#039;t known even by people involved in the project&lt;br /&gt;
* Joe Conway plans to create a committee website&lt;br /&gt;
* Lots of independently moving parts of the project&lt;br /&gt;
** partially intentionally done that way, for resilience to takeover&lt;br /&gt;
** also an obstruction to transparency&lt;br /&gt;
* Teams:&lt;br /&gt;
** Core Team - &amp;quot;last resort&amp;quot;, conflicts etc&lt;br /&gt;
** Committers - code obviously, plenty policy around that&lt;br /&gt;
** Pginfra - manages all the postgres infrastructure, servers for git etc&lt;br /&gt;
** Code of Conduct Committee * Deal with violations of the CoC&lt;br /&gt;
** Security 0 deal with security issues in our code&lt;br /&gt;
*** CNA  we can now assign our own CVEs&lt;br /&gt;
** Release - manage releases of postgres&lt;br /&gt;
*** RMT&lt;br /&gt;
*** Press&lt;br /&gt;
** Translators&lt;br /&gt;
** Packaging - build binary packages of postgres&lt;br /&gt;
** Press&lt;br /&gt;
** Planet&lt;br /&gt;
** pg.org moderation&lt;br /&gt;
** pgweb&lt;br /&gt;
** twitter etc&lt;br /&gt;
** Contributors team&lt;br /&gt;
** Funds&lt;br /&gt;
** GSCOC&lt;br /&gt;
** PGCA * Trademark etc&lt;br /&gt;
** Postgres Women&lt;br /&gt;
** Funds Groups&lt;br /&gt;
** Events Canada, organizing this conference&lt;br /&gt;
** I missed transcribing some, Jonathan missed listing some&lt;br /&gt;
* Amazing that it works, but it also often doesn&#039;t&lt;br /&gt;
* Robert: Really important to have list public, for volunteers to be able to oin&lt;br /&gt;
* Karen Jax: staffing, not manning teams&lt;br /&gt;
* Joe: Quick recap of the plans for listing of the teams on the website&lt;br /&gt;
** some teams already have pages, but there&#039;s no coherent way to find those&lt;br /&gt;
** have index with brief description and links to pages&lt;br /&gt;
&lt;br /&gt;
== Core Team - Tom Lane ==&lt;br /&gt;
&lt;br /&gt;
* At Berkeley, Postgres then Postgres 95, a few outside users&lt;br /&gt;
* Marc Fournier volunteered to host development&lt;br /&gt;
* Initial Core Team:&lt;br /&gt;
** 1996:&lt;br /&gt;
*** Mark Fournier&lt;br /&gt;
*** Bruce Mojian&lt;br /&gt;
*** Bryan Henderson&lt;br /&gt;
** 1998:&lt;br /&gt;
*** Jan Wiek&lt;br /&gt;
*** Tom Lane&lt;br /&gt;
* Initially did nearly all the work&lt;br /&gt;
* Early additional responsibility:&lt;br /&gt;
** releases&lt;br /&gt;
** infrastructure&lt;br /&gt;
** committter selection&lt;br /&gt;
* Additional responsibility&lt;br /&gt;
** Liaison&lt;br /&gt;
** Security&lt;br /&gt;
** Trademark&lt;br /&gt;
** really because ther wasn&#039;t anybody else&lt;br /&gt;
* Core never did:&lt;br /&gt;
** Website&lt;br /&gt;
** Advocacy&lt;br /&gt;
** Fundraising&lt;br /&gt;
* 2000: Landmark / Great Bridge&lt;br /&gt;
** started a postgres services company&lt;br /&gt;
** closed in .com bust&lt;br /&gt;
** Asked: How can this be done well with the community?&lt;br /&gt;
*** Not enough bandwidth / experience in core *&amp;gt; delegate&lt;br /&gt;
** Delegate:&lt;br /&gt;
*** security, in 2007&lt;br /&gt;
*** pginfra, in 2011&lt;br /&gt;
**** took over more incrementally&lt;br /&gt;
**** Tom doesn&#039;t remember all the details&lt;br /&gt;
**** some small preexisting responsibilities&lt;br /&gt;
*** Trademark issues&lt;br /&gt;
**** PgCAC, formally incorporated NPO&lt;br /&gt;
*** Release, in 2015&lt;br /&gt;
**** are we ready&lt;br /&gt;
**** do we need to release&lt;br /&gt;
**** about 2017 we switch to time based releases, for both minor and major releases&lt;br /&gt;
*** RMT, in 2016&lt;br /&gt;
*** Committter selection, in 2015&lt;br /&gt;
**** private committers list&lt;br /&gt;
*** CoC, in 2016&lt;br /&gt;
**** initial idea was for core to do enforcement&lt;br /&gt;
**** now CoC does that&lt;br /&gt;
** One would think core doesn&#039;t have work after all that delegation&lt;br /&gt;
** Still lots of coordination / &amp;quot;cat herding&amp;quot;&lt;br /&gt;
** Important teams overlap with Core, CoCC is explicitly separate&lt;br /&gt;
** largely independent teams&lt;br /&gt;
*** Advocacy&lt;br /&gt;
*** Funds&lt;br /&gt;
** Questions:&lt;br /&gt;
*** Stacey: Core is self selecting, plans to change that?&lt;br /&gt;
**** Tom:&lt;br /&gt;
***** Not currently&lt;br /&gt;
***** Should definitely be long-term members for institutional memory&lt;br /&gt;
**** Bruce: Takes a while to get there, we were looking for people a few times, didn&#039;t work out&lt;br /&gt;
**** Robert: Self selecting is an issue, but not clear what the solution is&lt;br /&gt;
**** Dave: It&#039;s hard to model something resilient against takeover&lt;br /&gt;
**** Karen: At least we should be honest about this issue toward the community&lt;br /&gt;
**** Heikki: Community is very concensus drive, hard to make decision, but also good to not piss off people. Core team has been decent at that.&lt;br /&gt;
**** Tom: Policy that there is not more than 50% of one company&lt;br /&gt;
**** Robert: Feels awkward to be &amp;quot;steered&amp;quot; by a something as opaque&lt;br /&gt;
&lt;br /&gt;
== Security Team - Noah ==&lt;br /&gt;
&lt;br /&gt;
* 17 people&lt;br /&gt;
* receives reports of security issues&lt;br /&gt;
* issues come from three groups&lt;br /&gt;
** postgres devs&lt;br /&gt;
** people we haven&#039;t heard of, typically something operating automated scanner&lt;br /&gt;
*** our mailing lists are public, you know?!?&lt;br /&gt;
** occasionally reports by &amp;quot;real&amp;quot; security researchers&lt;br /&gt;
* fixes developed by&lt;br /&gt;
** reports&lt;br /&gt;
** security team members&lt;br /&gt;
** &amp;quot;outsourcing program&amp;quot;, to non-security member committers&lt;br /&gt;
* 7 security issues in the last year, one high risk one&lt;br /&gt;
* We are now a CNA&lt;br /&gt;
** CVEs are assigned for most vulnerabilities&lt;br /&gt;
** new: encouragement to become our own numbering authority&lt;br /&gt;
** why worthwhile: CVEs assigned by outside numbering authorities by other numbering authorities&lt;br /&gt;
** with CNA we&#039;re supposed to be asked first&lt;br /&gt;
** now can update metadata for old CVEs&lt;br /&gt;
** also now responsible for assigning CVEs in the wider postgres space&lt;br /&gt;
** also get asked about filling out security questionaire&lt;br /&gt;
* Question to audience: Problems with security model?&lt;br /&gt;
** Dave Cramer: Process more complicated than github&#039;s&lt;br /&gt;
*** tarballs are released, commit messages mails are suppressed, but everyone can look at commits&lt;br /&gt;
*** in theory we could make fix in private repo, like we did once before&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PostgreSQL Community Association - Steve Singer ==&lt;br /&gt;
&lt;br /&gt;
* Special purpose entitity to focus on intelectual property matters&lt;br /&gt;
* Maintain and protect assets (trademarks, domain names, not code)&lt;br /&gt;
* does not hold copyright on postgres code, held by individuals&lt;br /&gt;
* Canadian Not for Profit&lt;br /&gt;
* Board:&lt;br /&gt;
** Dave Page&lt;br /&gt;
** Steve Siunger&lt;br /&gt;
** Jonathan Katz&lt;br /&gt;
** Jaime Casanova&lt;br /&gt;
** Peter Eisentraut&lt;br /&gt;
** Marc Fournier&lt;br /&gt;
* self selecting membership, by board (past and present members)&lt;br /&gt;
** aware of issues around that&lt;br /&gt;
* Why:&lt;br /&gt;
** ensure fair use of PostgreSQL brand assets&lt;br /&gt;
** otherwise somebody else can call something postgres&lt;br /&gt;
** requires enforcement, otherwise trademark is abandoned and can&#039;t be enforced&lt;br /&gt;
** keep PG fre and open source&lt;br /&gt;
* Where:&lt;br /&gt;
** Canada&lt;br /&gt;
** US&lt;br /&gt;
** Europe&lt;br /&gt;
* How:&lt;br /&gt;
** controlled fair use allowed&lt;br /&gt;
** example: Brand names involving postgres need to be licensed&lt;br /&gt;
** standard license for templates, but often companies want modified terms&lt;br /&gt;
* Key Activities:&lt;br /&gt;
** Oppose Trademark Registrations&lt;br /&gt;
*** some conflicts around that are public, others not&lt;br /&gt;
** Ask that the trademarks be used properly&lt;br /&gt;
** License where needed&lt;br /&gt;
* Highlights&lt;br /&gt;
** Fundacion PostgreSQL conclusion (after three years and lots of money)&lt;br /&gt;
** Trademark oppositions, cease &amp;amp; desists&lt;br /&gt;
** Donor Recognition Program&lt;br /&gt;
* Why private?&lt;br /&gt;
** public statement can have legal consequences, need to be reviewed by lawyers, costs money for review&lt;br /&gt;
** rather work amiciably, rather than public shaming, often succeeds&lt;br /&gt;
** some unlicensed uses are because we didn&#039;t have the time/money to do something about them&lt;br /&gt;
* Financial highlights:&lt;br /&gt;
** Net loss: CAD 11k&lt;br /&gt;
** Goal: Improve financials via Donor recognition program&lt;br /&gt;
** Various levels that grant public recognition&lt;br /&gt;
* Question:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code of Conduct Committee - Eliza Benett ==&lt;br /&gt;
&lt;br /&gt;
* Eliza is chair since 2014&lt;br /&gt;
* Overview of the last year&lt;br /&gt;
** Representation:&lt;br /&gt;
*** 5 members, 3 male identifying, 2 female, plus chair&lt;br /&gt;
*** geographic spread: 2 from Canada, 1 from Asial, one american in Asia, 1 from Europe&lt;br /&gt;
*** Volunteers, selected by current members&lt;br /&gt;
*** How can group size be increased&lt;br /&gt;
** Activity&lt;br /&gt;
*** 8 complaints in 2023/24 (inappropriate conduct on community channels (2), at community events (2), non-community channel (3))&lt;br /&gt;
*** Outcomes: no violation (3), out of scope (2), corrective recommended and taken (2), corrective action recommended (1)&lt;br /&gt;
*** processing done by lead investigator, always with at least one other person&lt;br /&gt;
*** [couldn&#039;t keep up]&lt;br /&gt;
** Trends:&lt;br /&gt;
*** 2023/24 have been busy&lt;br /&gt;
*** Complaints on social media, [couldn&#039;t keep up]&lt;br /&gt;
** Opportunities:&lt;br /&gt;
*** need new members&lt;br /&gt;
*** update CoC policy, hasn&#039;t bene updated significantly since introduction&lt;br /&gt;
*** improve enforcement, appeals process&lt;br /&gt;
*** inform community events about CoC existance / use of CoC[C]&lt;br /&gt;
** Revisions:&lt;br /&gt;
*** Roles &amp;amp; responsibilities&lt;br /&gt;
*** Scope clarification&lt;br /&gt;
*** Appeals process&lt;br /&gt;
*** Record sharing and retention, records exist since 2019 (unsure)&lt;br /&gt;
*** Communication processes&lt;br /&gt;
*** ....&lt;br /&gt;
*** proposed timeline: Summer 2024, engegement on policy revisions, September: 2024, in effect&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Port report - Thomas Munro ==&lt;br /&gt;
&lt;br /&gt;
* lots of platform that postgres used to run on, but doesn&#039;t anymore&lt;br /&gt;
* still support about 11 platforms&lt;br /&gt;
* most users on linux, some on windows, the rest probably miniscule&lt;br /&gt;
* Robert Haas and Devrim Gunduz think there are way more on windows than Thomas guessed&lt;br /&gt;
* Dave Page says some windows apps embed postgres&lt;br /&gt;
* Estimate about problem per platform, overwhelmingly windows&lt;br /&gt;
** Robert: Lots of it just perl crap&lt;br /&gt;
* Highlights:&lt;br /&gt;
** AIX was dropped in 2017, suddenly IBM folks appeared, rely on Postgres&lt;br /&gt;
*** AIX is weird, unusual linker/object format&lt;br /&gt;
*** Old OS versions in buildfarm&lt;br /&gt;
*** Vendor compiler requires extra work&lt;br /&gt;
**** some bugs got fixed&lt;br /&gt;
** HP-UX was dropped in 16&lt;br /&gt;
*** no real complaints, one mention&lt;br /&gt;
** Solaris &amp;lt;= 11.3 in 17 was dropped&lt;br /&gt;
*** solaris is less painful&lt;br /&gt;
*** user interest, solaris buildfarm animals by users&lt;br /&gt;
*** also illumos&lt;br /&gt;
*** they stopped increasing versions after 11.4&lt;br /&gt;
**** should we drop support for the sunpro compiler?&lt;br /&gt;
*** won&#039;t support newer things like direct-io&lt;br /&gt;
** FreeBSD:&lt;br /&gt;
*** Short supported version window, buildfarm animals exist that are very old&lt;br /&gt;
** OpenBSD:&lt;br /&gt;
*** uses libressl&lt;br /&gt;
** Linux+musl&lt;br /&gt;
*** different libc, a few incompatibilities that we have to deal with&lt;br /&gt;
*** Have a buildfarm animal now&lt;br /&gt;
** Windows:&lt;br /&gt;
*** Removed old perl based build system, did make things easier&lt;br /&gt;
*** Thomas never used windows, despite working for Microsoft&lt;br /&gt;
*** Locale support is very instable, breaks frequently&lt;br /&gt;
**** particularly with turkish locale, breaks all PG databases with the locale, but also some others&lt;br /&gt;
*** truncations fail occasionally&lt;br /&gt;
**** causes corruptions&lt;br /&gt;
*** Socket event loss, causes weird problems&lt;br /&gt;
*** Thomas tries to fix things, but doesn&#039;t use windows, hard to find testing&lt;br /&gt;
*** Thomas finds our state of windows support embarassing&lt;br /&gt;
*** We ought to make some decisions to improve the situation, requires making dropping some filesystems&lt;br /&gt;
**** who makes decision?&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=CI_Providers&amp;diff=38137</id>
		<title>CI Providers</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=CI_Providers&amp;diff=38137"/>
		<updated>2023-08-08T02:35:56Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Overview of CI providers and the limits imposed&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ CI Providers&lt;br /&gt;
|-&lt;br /&gt;
! Provider !! OSs !! Open source specific offering !! Monthly Minutes &amp;lt;br /&amp;gt; &amp;quot;open repo&amp;quot; !! Monthly Minutes&amp;lt;br /&amp;gt;open source !! Allows VMs !! Public Logs !! Links&lt;br /&gt;
|-&lt;br /&gt;
| cirrus-ci || linux, macos, windows, *bsd || no ||  ~ 16.6k 1 core linux&amp;lt;br /&amp;gt;833 4 core macos|| same || yes || yes || https://cirrus-ci.org/pricing/#compute-services &amp;lt;br /&amp;gt; https://cirrus-ci.org/blog/2023/07/17/limiting-free-usage-of-cirrus-ci/&lt;br /&gt;
|-&lt;br /&gt;
| github actions || linux, macos, windows || kinda || unlimited (?) || same || no || no || https://docs.github.com/en/actions/learn-github-actions/usage-limits-billing-and-administration&lt;br /&gt;
|-&lt;br /&gt;
| circle-ci || linux, macos, windows || yes || 400 || 80k 1 core linux&amp;lt;br /&amp;gt;600 4 core macos || yes (?) || no || https://circleci.com/pricing/ https://circleci.com/open-source/ &amp;lt;br /&amp;gt; https://circleci.com/product/features/resource-classes/&lt;br /&gt;
|-&lt;br /&gt;
| gitlab || linux, macos, windows || yes ||  400 || if approved 50k 1 core linux&amp;lt;br /&amp;gt;8.3k 4 core macos || no || yes || https://about.gitlab.com/pricing/ &amp;lt;br /&amp;gt; https://about.gitlab.com/solutions/open-source/&lt;br /&gt;
|-&lt;br /&gt;
| appveyor || linux, macos, windows || yes || 1 concurrent job || 50% off price || ? || ? || https://www.appveyor.com/pricing/ &amp;lt;br /&amp;gt; &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=CI_Providers&amp;diff=38136</id>
		<title>CI Providers</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=CI_Providers&amp;diff=38136"/>
		<updated>2023-08-08T02:32:42Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Overview of CI providers and the limits imposed&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ CI Providers&lt;br /&gt;
|-&lt;br /&gt;
! Provider !! OSs !! Open source specific offering !! Monthly Minutes &amp;lt;br /&amp;gt; &amp;quot;open repo&amp;quot; !! Monthly Minutes&amp;lt;br /&amp;gt;open source !! Allows VMs !! Public Logs !! Links&lt;br /&gt;
|-&lt;br /&gt;
| cirrus-ci || macos, linux, windows, *bsd || no ||  ~ 16.6k 1 core linux&amp;lt;br /&amp;gt;833 4 core macos|| same || yes || yes || https://cirrus-ci.org/pricing/#compute-services &amp;lt;br /&amp;gt; https://cirrus-ci.org/blog/2023/07/17/limiting-free-usage-of-cirrus-ci/&lt;br /&gt;
|-&lt;br /&gt;
| github actions || macos, linux, windows || kinda || unlimited (?) || same || no || no || https://docs.github.com/en/actions/learn-github-actions/usage-limits-billing-and-administration&lt;br /&gt;
|-&lt;br /&gt;
| circle-ci || macos, linux, windows || yes || 400 || 80k 1 core linux&amp;lt;br /&amp;gt;600 4 core macos || yes (?) || no || https://circleci.com/pricing/ https://circleci.com/open-source/ &amp;lt;br /&amp;gt; https://circleci.com/product/features/resource-classes/&lt;br /&gt;
|-&lt;br /&gt;
| gitlab || macos, linux, windows || yes ||  400 || if approved 50k 1 core linux&amp;lt;br /&amp;gt;8.3k 4 core macos || no || yes || https://about.gitlab.com/pricing/ &amp;lt;br /&amp;gt; https://about.gitlab.com/solutions/open-source/&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=CI_Providers&amp;diff=38135</id>
		<title>CI Providers</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=CI_Providers&amp;diff=38135"/>
		<updated>2023-08-08T02:29:45Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Overview of CI providers and the limits imposed&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ CI Providers&lt;br /&gt;
|-&lt;br /&gt;
! Provider !! OSs !! Open source specific offering !! Monthly Minutes &amp;quot;open repo&amp;quot; !! Monthly Minutes open source !! Allows VMs !! Public Logs !! Links&lt;br /&gt;
|-&lt;br /&gt;
| cirrus-ci || macos, linux, windows, *bsd || no ||  ~ 16.6k 1 core linux, 833 4 core macos|| same || yes || yes || https://cirrus-ci.org/pricing/#compute-services https://cirrus-ci.org/blog/2023/07/17/limiting-free-usage-of-cirrus-ci/&lt;br /&gt;
|-&lt;br /&gt;
| github actions || macos, linux, windows || kinda || unlimited (?) || same || no || no || https://docs.github.com/en/actions/learn-github-actions/usage-limits-billing-and-administration&lt;br /&gt;
|-&lt;br /&gt;
| circle-ci || macos, linux, windows || yes || 400 || 80k 1 core linux, 600 4 core macos || yes (?) || no || https://circleci.com/pricing/ https://circleci.com/open-source/ https://circleci.com/product/features/resource-classes/&lt;br /&gt;
|-&lt;br /&gt;
| gitlab || macos, linux, windows || yes ||  400 || if approved 50k 1 core linux, 8.3k 4 core macos || no || yes || https://about.gitlab.com/pricing/ https://about.gitlab.com/solutions/open-source/&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=CI_Providers&amp;diff=38134</id>
		<title>CI Providers</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=CI_Providers&amp;diff=38134"/>
		<updated>2023-08-08T02:27:31Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Overview of CI providers and the limits imposed&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ CI Providers&lt;br /&gt;
|-&lt;br /&gt;
! Provider !! OSs !! Open source specific offering !! Monthly Minutes &amp;quot;open repo&amp;quot; !! Monthly Minutes open source !! Allows VMs !! Public Logs !! Links&lt;br /&gt;
|-&lt;br /&gt;
| cirrus-ci || macos, linux, windows, *bsd || no ||  ~ 16.6k 1 core linux, 833 4 core macos|| same || yes || yes || https://cirrus-ci.org/pricing/#compute-services https://cirrus-ci.org/blog/2023/07/17/limiting-free-usage-of-cirrus-ci/&lt;br /&gt;
|-&lt;br /&gt;
| github actions || macos, linux, windows || kinda || unlimited (?) || same || no || no || https://docs.github.com/en/actions/learn-github-actions/usage-limits-billing-and-administration&lt;br /&gt;
|-&lt;br /&gt;
| circle-ci || macos, linux, windows || yes || 400 || 80k 1 core linux, 600 4 core macos || yes (?) || ? || https://circleci.com/pricing/ https://circleci.com/open-source/ https://circleci.com/product/features/resource-classes/&lt;br /&gt;
|-&lt;br /&gt;
| gitlab || macos, linux, windows || yes ||  400 || if approved 50k 1 core linux, 8.3k 4 core macos || no || ? || https://about.gitlab.com/pricing/ https://about.gitlab.com/solutions/open-source/&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=CI_Providers&amp;diff=38133</id>
		<title>CI Providers</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=CI_Providers&amp;diff=38133"/>
		<updated>2023-08-08T02:26:43Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Overview of CI providers and the limits imposed&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ CI Providers&lt;br /&gt;
|-&lt;br /&gt;
! Provider !! OSs !! Open source specific offering !! Monthly Minutes &amp;quot;open repo&amp;quot; !! Monthly Minutes open source !! Allows VMs !! Links&lt;br /&gt;
|-&lt;br /&gt;
| cirrus-ci || macos, linux, windows, *bsd || no ||  ~ 16.6k 1 core linux, 833 4 core macos|| same || yes || https://cirrus-ci.org/pricing/#compute-services https://cirrus-ci.org/blog/2023/07/17/limiting-free-usage-of-cirrus-ci/&lt;br /&gt;
|-&lt;br /&gt;
| github actions || macos, linux, windows || kinda || unlimited (?) || same || no ||  https://docs.github.com/en/actions/learn-github-actions/usage-limits-billing-and-administration&lt;br /&gt;
|-&lt;br /&gt;
| circle-ci || macos, linux, windows || yes || 400 || 80k 1 core linux, 600 4 core macos || yes (?) || https://circleci.com/pricing/ https://circleci.com/open-source/ https://circleci.com/product/features/resource-classes/&lt;br /&gt;
|-&lt;br /&gt;
| gitlab || macos, linux, windows || yes ||  400 || if approved 50k 1 core linux, 8.3k 4 core macos || no || https://about.gitlab.com/pricing/ https://about.gitlab.com/solutions/open-source/&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=CI_Providers&amp;diff=38132</id>
		<title>CI Providers</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=CI_Providers&amp;diff=38132"/>
		<updated>2023-08-08T01:56:34Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: Created page with &amp;quot;Overview of CI providers and the limits imposed  {| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot; |+ CI Providers |- ! Provider !! OSs !! Open source specific offering !! Monthly Minu...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Overview of CI providers and the limits imposed&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ CI Providers&lt;br /&gt;
|-&lt;br /&gt;
! Provider !! OSs !! Open source specific offering !! Monthly Minutes &amp;quot;open repo&amp;quot; !! Monthly Minutes open source !! Allows VMs !! Links&lt;br /&gt;
|-&lt;br /&gt;
| cirrus-ci || macos, linux, windows, *bsd || no ||  ~ 16.6k linux 1 core linux, 833 4 core macos|| same || yes || https://cirrus-ci.org/pricing/#compute-services https://cirrus-ci.org/blog/2023/07/17/limiting-free-usage-of-cirrus-ci/&lt;br /&gt;
|-&lt;br /&gt;
| github actions || macos, linux, windows || kinda || unlimited (?) || same || no ||  https://docs.github.com/en/actions/learn-github-actions/usage-limits-billing-and-administration&lt;br /&gt;
|-&lt;br /&gt;
| circle-ci || macos, linux, windows || yes || 400 || 80k 1 core linux, 600 4 core macos || yes (?) || https://circleci.com/pricing/ https://circleci.com/open-source/ https://circleci.com/product/features/resource-classes/&lt;br /&gt;
|-&lt;br /&gt;
| gitlab || macos, linux, windows || yes ||  400 || if approved 50k 1 core linux, 8.3k 4 core macos || no || https://about.gitlab.com/pricing/ https://about.gitlab.com/solutions/open-source/&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_16_Open_Items&amp;diff=38075</id>
		<title>PostgreSQL 16 Open Items</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_16_Open_Items&amp;diff=38075"/>
		<updated>2023-07-25T03:33:47Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Open Issues ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Please place new open items at the end of the list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: If known, please list the Owner of the open item.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CAJKUy5g2uZRrUDZJ8p-%3DgiwcSHVUn0c9nmdxPSY0jF0Ov8VoEA@mail.gmail.com|Assertion failure !bms_overlap(joinrel-&amp;gt;relids, required_outer)}}&lt;br /&gt;
** Owner: Tom Lane&lt;br /&gt;
* {{messageLink|CAD21AoDvDmUQeJtZrau1ovnT_smN940%3DKp6mszNGK3bq9yRN6g%40mail.gmail.com| Performance degradation on concurrent COPY into a single relation in PG16 }}&lt;br /&gt;
** Owner: Andres Freund&lt;br /&gt;
* {{messageLink|36a6e89689716c2ca1fae8adc8e84601a041121c.camel@j-davis.com| Unexplained behavior when ICU rules is the empty string.}}&lt;br /&gt;
** Owner: Peter Eisentraut&lt;br /&gt;
* {{messageLink|ZKy4AdrLEfbqrxGJ@telsasoft.com|REINDEX segv on null pointer in RemoveFromWaitQueue}}&lt;br /&gt;
** Owner: Andres Freund&lt;br /&gt;
** {{messageLink|CAD21AoDs7vzK7NErse7xTruqY-FXmM%2B3K00SdBtMcQhiRNkoeQ%40mail.gmail.com|Patch}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Decisions to Recheck Mid-Beta ==&lt;br /&gt;
&lt;br /&gt;
* Add any items that need discussion here..&lt;br /&gt;
&lt;br /&gt;
== Older bugs affecting stable branches ==&lt;br /&gt;
&lt;br /&gt;
=== Live issues ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/CA%2BhUKGK3PGKwcKqzoosamn36YW-fsuTdOPPF1i_rtEO%3DnEYKSg%40mail.gmail.com RecoveryConflictInterrupt() is unsafe in a signal handler]&lt;br /&gt;
** This seems to [https://www.postgresql.org/message-id/447238.1651082925%40sss.pgh.pa.us explain buildfarm failures in 031_recovery_conflict.pl]&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAH2-WzkjjCoq5Y4LeeHJcjYJVxGm3M3SAWZ0%3D6J8K1FPSC9K0w%40mail.gmail.com REINDEX on a system catalog can leave index with two index tuples whose heap TIDs match]&lt;br /&gt;
** In other words, there is a rare case where the HOT invariant is violated. Same HOT chain is indexed twice due to confusion about which precise heap tuple should be indexed.&lt;br /&gt;
** Unclear what the user impact is.&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20201001021609.GC8476%40telsasoft.com memory leak with JIT inlining]&lt;br /&gt;
** [https://www.postgresql.org/message-id/flat/20210331040751.GU4431%40telsasoft.com#cc34872765add8e483e05009212d9d39 Another report of (same?) issue and reproducer] [https://www.postgresql.org/message-id/flat/9f73e655-14b8-feaf-bd66-c0f506224b9e%40stephans-server.de Another report] [https://www.postgresql.org/message-id/flat/16707-f5df308978a55bf8%40postgresql.org Another report] [https://www.postgresql.org/message-id/flat/CAPH-tTxLf44s3CvUUtQpkDr1D8Hxqc2NGDzGXS1ODsfiJ6WSqA%40mail.gmail.com Another report] [https://www.postgresql.org/message-id/flat/a53cacb0-8835-57d6-31e4-4c5ef196de1a@deepbluecap.com Another report]&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/dc9dd229-ed30-6c62-4c41-d733ffff776b%40xs4all.nl TOAST fetches could perhaps occur after the needed data has been removed]&lt;br /&gt;
** The symptom originally reported in the thread was fixed by {{PgCommitURL|9f4f0a0dad4c7422a97d94e4051c08ec6d181dd6}}, but nobody is very happy with the status quo in this area.  Do we need to do more now?&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/ZArVOMifjzE7f8W7%40paquier.xyz Requiring recovery.signal or standby.signal when recovering with a backup_label]&lt;br /&gt;
** This is a rather old behavior that affects all stable branches, still not something that should be backpatched as-is.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|cfcca574-6967-c5ab-7dc3-2c82b6723b99@mail.ru|pg_visibility&#039;s pg_check_visible() yields false positive when working in parallel with autovacuum}}&lt;br /&gt;
** {{messageLink|1649062270.289865713@f403.i.mail.ru|Thread with patch}} [https://commitfest.postgresql.org/43/3739/ CF Entry]&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|1516594.1681482708@sss.pgh.pa.us|We are not compatible with newly-released LLVM 16}}&lt;br /&gt;
** {{messageLink|CA%2BhUKGKNX_%3Df%2B1C4r06WETKTq0G4Z_7q4L4Fxn5WWpMycDj9Fw%40mail.gmail.com|Patch}}&lt;br /&gt;
** Owner: Thomas Munro (volunteer LLVM API change chaser)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fixed issues ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAEze2WgGiw%2BLZt%2BvHf8tWqB_6VxeLsMeoAuod0N%3Dij1q17n5pw%40mail.gmail.com Non-replayable WAL records through overflows and &amp;gt;MaxAllocSize lengths]&lt;br /&gt;
** In other words; we can write xlog records that we can&#039;t read (plus potentially actual WAL corruption); making the instance unrecoverable, and blocks any replication.&lt;br /&gt;
** Exploitation seems limited to WAL records of 2PC and logical replication, and extension-generated WAL.&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
** Fixed at: {{PgCommitURL|8fcb32db98eda1ad2a0c0b40b1cbb5d9a7aa68f0}} and {{PgCommitURL|ffd1b6bb6f8a2ffc929699772610c6925364dbb3}} for HEAD.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/CAC+AXB26a4EmxM2suXxPpJaGrqAdxracd7hskLg-zxtPB50h7A@mail.gmail.com Fix fseek() detection of unseekable files on WIN32]&lt;br /&gt;
** Fixed at: {{PgCommitURL|a923e21631a29dc8b8781d7d02b5003d0df64ca3}} and {{PgCommitURL|765f5df726918bcdcfd16bcc5418e48663d1dd59}}, down to 14.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CAAKRu_bETD%2BAri600h6fRjX2p8rJSeMAUp%3D_y88juqOZgouTSg%40mail.gmail.com|Can&#039;t disable autovacuum cost delay through storage parameter}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|bfac8f8bc4a44c67c9f35b5266676278e4ba1217}}, down to 11.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CAJ7c6TMBTN3rcz4%3DAjYhLPD_w3FFT0Wq_C15jxCDn8U4tZnH1g@mail.gmail.com| EPQ misbehaves for inherited/partitioned tables}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|70b42f279}}, down to 14.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|ZEZDj1H61ryrmY9o@msg.df7cb.de|could not extend file &amp;quot;base/5/3501&amp;quot; with FileFallocate(): Interrupted system call}}&lt;br /&gt;
** Original commit: {{PgCommitURL|4d330a61bb1}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|0d369ac650}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230314174521.74jl6ffqsee5mtug%40awork3.anarazel.de|DROP DATABASE is interruptible}}&lt;br /&gt;
** Additional discussion: {{messageLink|01020187577238cf-da8c0f4a-3ab9-445a-8c74-31ef51439f30-000000%40eu-west-1.amazonses.com|&amp;quot;PANIC: could not open critical system index 2662&amp;quot; - twice}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|c66a7d75}}, down to 11.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|17997-a044c27aef95daf8@postgresql.org|Assertion failure when attaching a partition index}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|38ea6aa9}}, down to 11.&lt;br /&gt;
** Fixed at: {{PgCommitURL|cfc43aeb}}, down to 11.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|ae46f2fb-5586-3de0-b54b-1bb0f6410ebd@inbox.ru|Issues with calculations of LimitAdditionalPins}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|bd2f46c6559}}&lt;br /&gt;
&lt;br /&gt;
== Non-bugs ==&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|17862-1ab8f74b0f7b0611@postgresql.org|WindowAgg startup costs don&#039;t take into account partition bound.  Can lead to incorrect use of cheap startup plans}}&lt;br /&gt;
** {{messageLink|CAApHDvrB0S5BMv+0-wTTqWFE-BJ0noWqTnDu9QQfjZ2VSpLv_g@mail.gmail.com|Patch to fix and discussion}}&lt;br /&gt;
&lt;br /&gt;
== Resolved Issues ==&lt;br /&gt;
&lt;br /&gt;
=== resolved before 16beta3 ===&lt;br /&gt;
* {{messageLink|ZJp921+nITFnvBVS@paquier.xyz|Add TLI number to name of files generated by pg_waldump --save-fullpage}}&lt;br /&gt;
** Owner: Michael Paquier&lt;br /&gt;
** Fixed at: {{PgCommitURL|b381d9637030c163c3b1f8a9d3de51dfc1b4ee58}}&lt;br /&gt;
* {{messageLink|e587e2ee-7de0-88a2-10f8-c7cf001bab8c%40postgrespro.ru|psql: Add role&#039;s membership options to the \du+ command}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|0a1d2a7df852f16c452eef8a83003943125162c7}}&lt;br /&gt;
&lt;br /&gt;
=== resolved before 16beta2 ===&lt;br /&gt;
* {{messageLink|17978-12f3d93a55297266@postgresql.org|wrong join order subsequent to removal of delay_upper_joins check}}&lt;br /&gt;
** Owner: Tom Lane&lt;br /&gt;
** Fixed at: {{PgCommitURL|3af87736bf5d5c7bea086d962afc2bbf4f29279a}}&lt;br /&gt;
* {{messageLink|DFBB2D25-DE97-49CA-A60E-07C881EA59A7@winand.at|Inconsistent nulling bitmap in nestloop parameters}}&lt;br /&gt;
** Owner: Tom Lane&lt;br /&gt;
** All known issues fixed as of {{PgCommitURL|efeb12ef0bfef0b5aa966a56bb4dbb1f936bda0c}}&lt;br /&gt;
* {{messageLink|17976-4b638b525e9a983b@postgresql.org|join removal can no longer skip updating EquivalenceClasses}}&lt;br /&gt;
** Owner: Tom Lane&lt;br /&gt;
** Fixed at: {{PgCommitURL|f4c00d138f6dea4c9d8af8ec280b7edc9b0a29e1}}&lt;br /&gt;
* {{messageLink|CAH2-Wz%3D8Z9qY58bjm_7TAHgtW6RzZ5Ke62q5emdCEy9BAzwhmg%40mail.gmail.com|Cleaning up nbtree after logical decoding on standby work}}&lt;br /&gt;
** Owner: Peter Geoghegan, Andres Freund&lt;br /&gt;
** Original commit: {{PgCommitURL|61b313e4}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|d088ba5a}}&lt;br /&gt;
* {{messageLink|CAMbWs4_tuVn9EwwMcggGiZJWWstdXX_ci8FeEU17vs+4nLgw3w@mail.gmail.com|Assert failure and wrong query results due to incorrectly removing PHV}}&lt;br /&gt;
** Owner: Tom Lane&lt;br /&gt;
** Fixed at: {{PgCommitURL|9a2dbc614e6e47da3c49daacec106da32eba9467}}&lt;br /&gt;
* {{messageLink|CAMbWs4-_vwkBij4XOQ5ukxUvLgwTm0kS5_DO9CicUeKbEfKjUw%40mail.gmail.com|Assert failure of the cross-check for nullingrels}}&lt;br /&gt;
** Owner: Tom Lane&lt;br /&gt;
** Original commit: {{PgCommitURL|2489d76c4}}&lt;br /&gt;
** [https://commitfest.postgresql.org/43/4250/ CF Entry]&lt;br /&gt;
** Fixed at: {{PgCommitURL|991a3df22}}&lt;br /&gt;
* Switch to ICU for 17?&lt;br /&gt;
** Owner: Jeff Davis&lt;br /&gt;
** {{messageLink|82c4c816-06f6-d3e3-ba02-fca4a5cef065@enterprisedb.com|I suggest waiting until next week to commit it and then see what happens}}&lt;br /&gt;
** [https://commitfest.postgresql.org/42/4169/ CF Entry]&lt;br /&gt;
** Open item description not clear; if it is an open item, it&#039;s redundant with the issue &amp;quot;The rules for choosing default ICU locale seem pretty unfriendly&amp;quot;. Closed. &lt;br /&gt;
* {{messageLink|874jp9f5jo.fsf@news-spur.riddles.org.uk|The rules for choosing default ICU locale seem pretty unfriendly}}&lt;br /&gt;
** Owner: Jeff Davis&lt;br /&gt;
** Fixed at: {{PgCommitURL|2535c74b1a}}, {{PgCommitURL|f3a01af29b}}&lt;br /&gt;
* {{messageLink|20230613211246.GA219055@nathanxps13|ff9618e creates cache lookup hazards with partition trees}}&lt;br /&gt;
** Owner: Nathan Bossart, &amp;lt;s&amp;gt;Jeff Davis&amp;lt;/s&amp;gt;&lt;br /&gt;
** Fixed at: {{PgCommitURL|4dbdb82513}}, {{PgCommitURL|c2122aae63}}&lt;br /&gt;
=== resolved before 16beta1 ===&lt;br /&gt;
* {{messageLink|CAHewXNnu7u1aT%3D%3DWjnCRa%2BSzKb6s80hvwPP_9eMvvvtdyFdqjw%40mail.gmail.com|ERROR: wrong varnullingrels (b 5 7) (expected (b)) for Var 3/3}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|d0f952691}}&lt;br /&gt;
* {{messageLink|d46f9265-ff3c-6743-2278-6772598233c2%40pgmasters.net|Possible regression setting GUCs on \connect}}&lt;br /&gt;
** Owner: Alexander Korotkov&lt;br /&gt;
** Discussion on reverting {{PgCommitURL|096dd80f3}}&lt;br /&gt;
** Original commit: {{PgCommitURL|096dd80f3}}&lt;br /&gt;
** Reverted at: {{PgCommitURL|b9a7a822723aebb16cbe7e5fb874e5124745b07e}}&lt;br /&gt;
&lt;br /&gt;
* Planner makes improper clause pushdown decisions due to outer-join-aware-Vars changes&lt;br /&gt;
** {{messageLink|0b819232-4b50-f245-1c7d-c8c61bf41827@postgrespro.ru|Clause accidentally pushed down}}&lt;br /&gt;
** {{messageLink|CAHewXNks3w_Vy9CWoVtHx1XSaeiFpsOzh-zy5eu0Khp1PtG1sA@mail.gmail.com|wrong results due to qual pushdown}}&lt;br /&gt;
** Original commit: {{PgCommitURL|2489d76c4}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|9df8f903eb6758be5a19e66cdf77e922e9329c31}}&lt;br /&gt;
&lt;br /&gt;
* Revert {{PgCommitURL|ec386948948}}, per {{messageLink|20230330105325.y6uvpalspynf2frt@alvherre.pgsql|Re: &amp;quot;variable not found in subplan target list&amp;quot;}}&lt;br /&gt;
** Reverted at {{PgCommitURL|5472743d9e8}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAEZATCWETioXs5kY8vT6BVguY41_wD962VDk%3Du_Nvd7S1UXzuQ%40mail.gmail.com ERROR:  ORDER/GROUP BY expression not found in targetlist]&lt;br /&gt;
** Fixed at: {{PgCommitURL|da5800d5fa636c6e10c9c98402d872c76aa1c8d0}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20230212233711.GA1316@telsasoft.com various elogs hit by sqlsmith (ExecRTCheckPerms() and many prunable partitions)]&lt;br /&gt;
** Fixed at: {{PgCommitURL|c7468c73f7b6e842a53c12eaee5578a76a8fa7a6}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20230228235834.GC30529@telsasoft.com pg_dump: zlib compression fails for empty objects (LOs)]&lt;br /&gt;
** Fixed at: {{PgCommitURL|00d9dcf5bebbb355152a60f0e2120cdf7f9e7ddd}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20230227044910.GO1653@telsasoft.com pg_dump: lz4 compression uses no persistent state and writes a block header for every row]&lt;br /&gt;
** Fixed at: {{PgCommitURL|0070b66fef21e909adb283f7faa7b1978836ad75}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|3590249.1680971629@sss.pgh.pa.us|Assertion failure with parallel full hash join}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|b37d051b0e59e4324e346655a27509507813db79}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|ZDDO6jaESKaBgej0@tamriel.snowman.net|De-revert &amp;quot;Add support for Kerberos credential delegation&amp;quot;}}&lt;br /&gt;
** Owner: Stephen Frost&lt;br /&gt;
** Original commit: {{PgCommitURL|3d4fa227bce4294ce1cc214b4a9d3b7caa3f0454}}&lt;br /&gt;
** Revert: ({{PgCommitURL|3d03b24c350ab060bb223623bdff38835bd7afd0}}&lt;br /&gt;
** De-Revert: {{PgCommitURL|6633cfb21691840c33816a6dacaca0b504efb895}}&lt;br /&gt;
** Resolved at: {{PgCommitURL|f7431bca8b0138bdbce7025871560d39119565a0}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|c39be3c5-c1a5-1e33-1024-16f527e251a4@enterprisedb.com|SSL tests break on non-existing system CA pool}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|0b5d1fb36adda612bd3d5d032463a6eeb0729237}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CAD21AoBS7o6Ljt_vfqPQPf67AhzKu3fR0iqk8B%3DvVYczMugKMQ%40mail.gmail.com|VacuumUpdateCosts() logging condition incorrect for some initial values of vacuum_cost_delay}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|a9781ae11ba2fdb44a3a72c9a7ebb727140b25c5}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CA%2BhUKGJ-ZPJwKHVLbqye92-ZXeLoCHu5wJL6L6HhNP7FkJ%3DmeA%40mail.gmail.com|check_strxfrm_bug()}}&lt;br /&gt;
** Owner: Thomas Munro&lt;br /&gt;
** Fixed at: {{PgCommitURL|7d3d72b55edd1b7552a9a358991555994efab0e9}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230317230930.nhsgk3qfk7f4axls%40awork3.anarazel.de|Should we remove vacuum_defer_cleanup_age?}}&lt;br /&gt;
** Owner: Andres Freund&lt;br /&gt;
** Fixed at: {{PgCommitURL|1118cd37eb61e6a2428f457a8b2026a7bb3f801a}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|2fefa454-5a70-2174-ddbf-4a0e41537139@gmail.com|Add two missing tests in 035_standby_logical_decoding.pl}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|376dc820531bafcbf105fff74c5b14c23d9950af}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|a6e04b1d20c2e9cece9b64bb5b36ebfdc3a9031b}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|b32bed1b-0746-9b20-1472-4bdc9ca66d52@gmail.com|Performance regression due to SQLValueFunction removal}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|d8c3106bb60e4f87be595f241e173ba3c2b7aa2c}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230419172326.dhgyo4wrrhulovt6%40awork3.anarazel.de|pg_stat_io not tracking smgrwriteback() is confusing}}&lt;br /&gt;
** Owner: Andres Freund&lt;br /&gt;
** Fixed at: {{PgCommitURL|093e5c57d506783a95dd8feddd9a3f2651e1aeba}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|ZFhCyn4Gm2eu60rB@paquier.xyz|Table data compression is broken with pg_dump --compress lz4}}&lt;br /&gt;
** Owner: Tomas Vondra&lt;br /&gt;
** Fixed at: {{PgCommitURL|1a05c1d252993b0a59c58a6daf91a2df9333044f}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|94ae9bca-5ebb-1e68-bb7b-4f32e89fefbe@gmail.com|Valgrind unhappy with LZ4F code in pg_dump}}&lt;br /&gt;
** Owner: Tomas Vondra&lt;br /&gt;
** Fixed at: {{PgCommitURL|3c18d90f8907e53c3021fca13ad046133c480e4d}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230509190247.3rrplhdgem6su6cg@awork3.anarazel.de|walsender performance regression due to logical decoding on standby changes}}&lt;br /&gt;
** Owner: Andres Freund&lt;br /&gt;
** Original commit: {{PgCommitURL|e101dfac}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|bc971f4025c378ce500d86597c34b0ef996d4d8c}}&lt;br /&gt;
&lt;br /&gt;
== Won&#039;t Fix ==&lt;br /&gt;
&lt;br /&gt;
* Is it OK that WL_SOCKET_ACCEPT is less fair on Windows than on Unix (and than the coding before 16) when there are multiple server sockets configured?&lt;br /&gt;
** {{messageLink|CA%2BhUKG%2BA2dk29hr5zRP3HVJQ-_PncNJM6HVQ7aaYLXLRBZU-xw%40mail.gmail.com|WL_SOCKET_ACCEPT fairness on Windows}} has a (blind) patch to fix that, but would need a Windows hacker to test&lt;br /&gt;
** Owner: Thomas Munro&lt;br /&gt;
** Original commit: {{PgCommitURL|7389aad6}}&lt;br /&gt;
** Issue reclassified as a non-critical improvement to be [https://commitfest.postgresql.org/43/4263/ considered for 17]&lt;br /&gt;
&lt;br /&gt;
== Important Dates ==&lt;br /&gt;
&lt;br /&gt;
Current schedule:&lt;br /&gt;
&lt;br /&gt;
* Beta 3: (August 10, 2023)&lt;br /&gt;
* Beta 2: June 29, 2023&lt;br /&gt;
* Beta 1: May 25, 2023&lt;br /&gt;
* Feature Freeze: April 8, 2023 0:00 AoE (&#039;&#039;&#039;Last Day to Commit Features&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Release Management Team]]&lt;br /&gt;
* [[PostgreSQL 15 Open Items]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Open_Items]]&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_16_Open_Items&amp;diff=38000</id>
		<title>PostgreSQL 16 Open Items</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_16_Open_Items&amp;diff=38000"/>
		<updated>2023-06-21T03:49:13Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Open Issues ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Please place new open items at the end of the list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: If known, please list the Owner of the open item.&lt;br /&gt;
&lt;br /&gt;
* Switch to ICU for 17?&lt;br /&gt;
** Owner: Jeff Davis&lt;br /&gt;
** {{messageLink|82c4c816-06f6-d3e3-ba02-fca4a5cef065@enterprisedb.com|I suggest waiting until next week to commit it and then see what happens}}&lt;br /&gt;
** [https://commitfest.postgresql.org/42/4169/ CF Entry]&lt;br /&gt;
* {{messageLink|e587e2ee-7de0-88a2-10f8-c7cf001bab8c%40postgrespro.ru|psql: Add role&#039;s membership options to the \du+ command}}&lt;br /&gt;
** [https://commitfest.postgresql.org/43/4116/ CF Entry]&lt;br /&gt;
** NOTE: This is not a committed feature for v16&lt;br /&gt;
* {{messageLink|874jp9f5jo.fsf@news-spur.riddles.org.uk|The rules for choosing default ICU locale seem pretty unfriendly}}&lt;br /&gt;
** Owner: Jeff Davis&lt;br /&gt;
* {{messageLink|20230613211246.GA219055@nathanxps13|ff9618e creates cache lookup hazards with partition trees}}&lt;br /&gt;
** Owner: Nathan Bossart, &amp;lt;s&amp;gt;Jeff Davis&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Decisions to Recheck Mid-Beta ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/268fd337-8bb7-92e6-0da2-416c022c11f3%40enterprisedb.com Reconsider a utility_query_id GUC to control if query jumbling of utilities can go through the past string-only mode and the new mode?]&lt;br /&gt;
** Potential owner: Michael Paquier&lt;br /&gt;
&lt;br /&gt;
== Older bugs affecting stable branches ==&lt;br /&gt;
&lt;br /&gt;
=== Live issues ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/CA%2BhUKGK3PGKwcKqzoosamn36YW-fsuTdOPPF1i_rtEO%3DnEYKSg%40mail.gmail.com RecoveryConflictInterrupt() is unsafe in a signal handler]&lt;br /&gt;
** This seems to [https://www.postgresql.org/message-id/447238.1651082925%40sss.pgh.pa.us explain buildfarm failures in 031_recovery_conflict.pl]&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAH2-WzkjjCoq5Y4LeeHJcjYJVxGm3M3SAWZ0%3D6J8K1FPSC9K0w%40mail.gmail.com REINDEX on a system catalog can leave index with two index tuples whose heap TIDs match]&lt;br /&gt;
** In other words, there is a rare case where the HOT invariant is violated. Same HOT chain is indexed twice due to confusion about which precise heap tuple should be indexed.&lt;br /&gt;
** Unclear what the user impact is.&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20201001021609.GC8476%40telsasoft.com memory leak with JIT inlining]&lt;br /&gt;
** [https://www.postgresql.org/message-id/flat/20210331040751.GU4431%40telsasoft.com#cc34872765add8e483e05009212d9d39 Another report of (same?) issue and reproducer] [https://www.postgresql.org/message-id/flat/9f73e655-14b8-feaf-bd66-c0f506224b9e%40stephans-server.de Another report] [https://www.postgresql.org/message-id/flat/16707-f5df308978a55bf8%40postgresql.org Another report] [https://www.postgresql.org/message-id/flat/CAPH-tTxLf44s3CvUUtQpkDr1D8Hxqc2NGDzGXS1ODsfiJ6WSqA%40mail.gmail.com Another report] [https://www.postgresql.org/message-id/flat/a53cacb0-8835-57d6-31e4-4c5ef196de1a@deepbluecap.com Another report]&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/dc9dd229-ed30-6c62-4c41-d733ffff776b%40xs4all.nl TOAST fetches could perhaps occur after the needed data has been removed]&lt;br /&gt;
** The symptom originally reported in the thread was fixed by {{PgCommitURL|9f4f0a0dad4c7422a97d94e4051c08ec6d181dd6}}, but nobody is very happy with the status quo in this area.  Do we need to do more now?&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/ZArVOMifjzE7f8W7%40paquier.xyz Requiring recovery.signal or standby.signal when recovering with a backup_label]&lt;br /&gt;
** This is a rather old behavior that affects all stable branches, still not something that should be backpatched as-is.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|cfcca574-6967-c5ab-7dc3-2c82b6723b99@mail.ru|pg_visibility&#039;s pg_check_visible() yields false positive when working in parallel with autovacuum}}&lt;br /&gt;
** {{messageLink|1649062270.289865713@f403.i.mail.ru|Thread with patch}} [https://commitfest.postgresql.org/43/3739/ CF Entry]&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|1516594.1681482708@sss.pgh.pa.us|We are not compatible with newly-released LLVM 16}}&lt;br /&gt;
** {{messageLink|CA%2BhUKGKNX_%3Df%2B1C4r06WETKTq0G4Z_7q4L4Fxn5WWpMycDj9Fw%40mail.gmail.com|Patch}}&lt;br /&gt;
** Owner: Thomas Munro (volunteer LLVM API change chaser)&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230314174521.74jl6ffqsee5mtug%40awork3.anarazel.de|DROP DATABASE is interruptible}}&lt;br /&gt;
** Additional discussion: {{messageLink|01020187577238cf-da8c0f4a-3ab9-445a-8c74-31ef51439f30-000000%40eu-west-1.amazonses.com|&amp;quot;PANIC: could not open critical system index 2662&amp;quot; - twice}}&lt;br /&gt;
&lt;br /&gt;
=== Fixed issues ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAEze2WgGiw%2BLZt%2BvHf8tWqB_6VxeLsMeoAuod0N%3Dij1q17n5pw%40mail.gmail.com Non-replayable WAL records through overflows and &amp;gt;MaxAllocSize lengths]&lt;br /&gt;
** In other words; we can write xlog records that we can&#039;t read (plus potentially actual WAL corruption); making the instance unrecoverable, and blocks any replication.&lt;br /&gt;
** Exploitation seems limited to WAL records of 2PC and logical replication, and extension-generated WAL.&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
** Fixed at: {{PgCommitURL|8fcb32db98eda1ad2a0c0b40b1cbb5d9a7aa68f0}} and {{PgCommitURL|ffd1b6bb6f8a2ffc929699772610c6925364dbb3}} for HEAD.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/CAC+AXB26a4EmxM2suXxPpJaGrqAdxracd7hskLg-zxtPB50h7A@mail.gmail.com Fix fseek() detection of unseekable files on WIN32]&lt;br /&gt;
** Fixed at: {{PgCommitURL|a923e21631a29dc8b8781d7d02b5003d0df64ca3}} and {{PgCommitURL|765f5df726918bcdcfd16bcc5418e48663d1dd59}}, down to 14.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CAAKRu_bETD%2BAri600h6fRjX2p8rJSeMAUp%3D_y88juqOZgouTSg%40mail.gmail.com|Can&#039;t disable autovacuum cost delay through storage parameter}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|bfac8f8bc4a44c67c9f35b5266676278e4ba1217}}, down to 11.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CAJ7c6TMBTN3rcz4%3DAjYhLPD_w3FFT0Wq_C15jxCDn8U4tZnH1g@mail.gmail.com| EPQ misbehaves for inherited/partitioned tables}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|70b42f279}}, down to 14.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|ZEZDj1H61ryrmY9o@msg.df7cb.de|could not extend file &amp;quot;base/5/3501&amp;quot; with FileFallocate(): Interrupted system call}}&lt;br /&gt;
** Original commit: {{PgCommitURL|4d330a61bb1}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|0d369ac650}}&lt;br /&gt;
&lt;br /&gt;
== Non-bugs ==&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|17862-1ab8f74b0f7b0611@postgresql.org|WindowAgg startup costs don&#039;t take into account partition bound.  Can lead to incorrect use of cheap startup plans}}&lt;br /&gt;
** {{messageLink|CAApHDvrB0S5BMv+0-wTTqWFE-BJ0noWqTnDu9QQfjZ2VSpLv_g@mail.gmail.com|Patch to fix and discussion}}&lt;br /&gt;
&lt;br /&gt;
== Resolved Issues ==&lt;br /&gt;
&lt;br /&gt;
=== resolved before 16beta2 ===&lt;br /&gt;
* {{messageLink|17978-12f3d93a55297266@postgresql.org|wrong join order subsequent to removal of delay_upper_joins check}}&lt;br /&gt;
** Owner: Tom Lane&lt;br /&gt;
** Fixed at: {{PgCommitURL|3af87736bf5d5c7bea086d962afc2bbf4f29279a}}&lt;br /&gt;
* {{messageLink|DFBB2D25-DE97-49CA-A60E-07C881EA59A7@winand.at|Inconsistent nulling bitmap in nestloop parameters}}&lt;br /&gt;
** Owner: Tom Lane&lt;br /&gt;
** All known issues fixed as of {{PgCommitURL|efeb12ef0bfef0b5aa966a56bb4dbb1f936bda0c}}&lt;br /&gt;
* {{messageLink|17976-4b638b525e9a983b@postgresql.org|join removal can no longer skip updating EquivalenceClasses}}&lt;br /&gt;
** Owner: Tom Lane&lt;br /&gt;
** Fixed at: {{PgCommitURL|f4c00d138f6dea4c9d8af8ec280b7edc9b0a29e1}}&lt;br /&gt;
* {{messageLink|CAH2-Wz%3D8Z9qY58bjm_7TAHgtW6RzZ5Ke62q5emdCEy9BAzwhmg%40mail.gmail.com|Cleaning up nbtree after logical decoding on standby work}}&lt;br /&gt;
** Owner: Peter Geoghegan, Andres Freund&lt;br /&gt;
** Original commit: {{PgCommitURL|61b313e4}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|d088ba5a}}&lt;br /&gt;
* {{messageLink|CAMbWs4_tuVn9EwwMcggGiZJWWstdXX_ci8FeEU17vs+4nLgw3w@mail.gmail.com|Assert failure and wrong query results due to incorrectly removing PHV}}&lt;br /&gt;
** Owner: Tom Lane&lt;br /&gt;
** Fixed at: {{PgCommitURL|9a2dbc614e6e47da3c49daacec106da32eba9467}}&lt;br /&gt;
* {{messageLink|CAMbWs4-_vwkBij4XOQ5ukxUvLgwTm0kS5_DO9CicUeKbEfKjUw%40mail.gmail.com|Assert failure of the cross-check for nullingrels}}&lt;br /&gt;
** Owner: Tom Lane&lt;br /&gt;
** Original commit: {{PgCommitURL|2489d76c4}}&lt;br /&gt;
** [https://commitfest.postgresql.org/43/4250/ CF Entry]&lt;br /&gt;
** Fixed at: {{PgCommitURL|991a3df22}}&lt;br /&gt;
&lt;br /&gt;
=== resolved before 16beta1 ===&lt;br /&gt;
* {{messageLink|CAHewXNnu7u1aT%3D%3DWjnCRa%2BSzKb6s80hvwPP_9eMvvvtdyFdqjw%40mail.gmail.com|ERROR: wrong varnullingrels (b 5 7) (expected (b)) for Var 3/3}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|d0f952691}}&lt;br /&gt;
* {{messageLink|d46f9265-ff3c-6743-2278-6772598233c2%40pgmasters.net|Possible regression setting GUCs on \connect}}&lt;br /&gt;
** Owner: Alexander Korotkov&lt;br /&gt;
** Discussion on reverting {{PgCommitURL|096dd80f3}}&lt;br /&gt;
** Original commit: {{PgCommitURL|096dd80f3}}&lt;br /&gt;
** Reverted at: {{PgCommitURL|b9a7a822723aebb16cbe7e5fb874e5124745b07e}}&lt;br /&gt;
&lt;br /&gt;
* Planner makes improper clause pushdown decisions due to outer-join-aware-Vars changes&lt;br /&gt;
** {{messageLink|0b819232-4b50-f245-1c7d-c8c61bf41827@postgrespro.ru|Clause accidentally pushed down}}&lt;br /&gt;
** {{messageLink|CAHewXNks3w_Vy9CWoVtHx1XSaeiFpsOzh-zy5eu0Khp1PtG1sA@mail.gmail.com|wrong results due to qual pushdown}}&lt;br /&gt;
** Original commit: {{PgCommitURL|2489d76c4}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|9df8f903eb6758be5a19e66cdf77e922e9329c31}}&lt;br /&gt;
&lt;br /&gt;
* Revert {{PgCommitURL|ec386948948}}, per {{messageLink|20230330105325.y6uvpalspynf2frt@alvherre.pgsql|Re: &amp;quot;variable not found in subplan target list&amp;quot;}}&lt;br /&gt;
** Reverted at {{PgCommitURL|5472743d9e8}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAEZATCWETioXs5kY8vT6BVguY41_wD962VDk%3Du_Nvd7S1UXzuQ%40mail.gmail.com ERROR:  ORDER/GROUP BY expression not found in targetlist]&lt;br /&gt;
** Fixed at: {{PgCommitURL|da5800d5fa636c6e10c9c98402d872c76aa1c8d0}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20230212233711.GA1316@telsasoft.com various elogs hit by sqlsmith (ExecRTCheckPerms() and many prunable partitions)]&lt;br /&gt;
** Fixed at: {{PgCommitURL|c7468c73f7b6e842a53c12eaee5578a76a8fa7a6}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20230228235834.GC30529@telsasoft.com pg_dump: zlib compression fails for empty objects (LOs)]&lt;br /&gt;
** Fixed at: {{PgCommitURL|00d9dcf5bebbb355152a60f0e2120cdf7f9e7ddd}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20230227044910.GO1653@telsasoft.com pg_dump: lz4 compression uses no persistent state and writes a block header for every row]&lt;br /&gt;
** Fixed at: {{PgCommitURL|0070b66fef21e909adb283f7faa7b1978836ad75}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|3590249.1680971629@sss.pgh.pa.us|Assertion failure with parallel full hash join}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|b37d051b0e59e4324e346655a27509507813db79}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|ZDDO6jaESKaBgej0@tamriel.snowman.net|De-revert &amp;quot;Add support for Kerberos credential delegation&amp;quot;}}&lt;br /&gt;
** Owner: Stephen Frost&lt;br /&gt;
** Original commit: {{PgCommitURL|3d4fa227bce4294ce1cc214b4a9d3b7caa3f0454}}&lt;br /&gt;
** Revert: ({{PgCommitURL|3d03b24c350ab060bb223623bdff38835bd7afd0}}&lt;br /&gt;
** De-Revert: {{PgCommitURL|6633cfb21691840c33816a6dacaca0b504efb895}}&lt;br /&gt;
** Resolved at: {{PgCommitURL|f7431bca8b0138bdbce7025871560d39119565a0}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|c39be3c5-c1a5-1e33-1024-16f527e251a4@enterprisedb.com|SSL tests break on non-existing system CA pool}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|0b5d1fb36adda612bd3d5d032463a6eeb0729237}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CAD21AoBS7o6Ljt_vfqPQPf67AhzKu3fR0iqk8B%3DvVYczMugKMQ%40mail.gmail.com|VacuumUpdateCosts() logging condition incorrect for some initial values of vacuum_cost_delay}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|a9781ae11ba2fdb44a3a72c9a7ebb727140b25c5}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CA%2BhUKGJ-ZPJwKHVLbqye92-ZXeLoCHu5wJL6L6HhNP7FkJ%3DmeA%40mail.gmail.com|check_strxfrm_bug()}}&lt;br /&gt;
** Owner: Thomas Munro&lt;br /&gt;
** Fixed at: {{PgCommitURL|7d3d72b55edd1b7552a9a358991555994efab0e9}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230317230930.nhsgk3qfk7f4axls%40awork3.anarazel.de|Should we remove vacuum_defer_cleanup_age?}}&lt;br /&gt;
** Owner: Andres Freund&lt;br /&gt;
** Fixed at: {{PgCommitURL|1118cd37eb61e6a2428f457a8b2026a7bb3f801a}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|2fefa454-5a70-2174-ddbf-4a0e41537139@gmail.com|Add two missing tests in 035_standby_logical_decoding.pl}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|376dc820531bafcbf105fff74c5b14c23d9950af}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|a6e04b1d20c2e9cece9b64bb5b36ebfdc3a9031b}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|b32bed1b-0746-9b20-1472-4bdc9ca66d52@gmail.com|Performance regression due to SQLValueFunction removal}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|d8c3106bb60e4f87be595f241e173ba3c2b7aa2c}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230419172326.dhgyo4wrrhulovt6%40awork3.anarazel.de|pg_stat_io not tracking smgrwriteback() is confusing}}&lt;br /&gt;
** Owner: Andres Freund&lt;br /&gt;
** Fixed at: {{PgCommitURL|093e5c57d506783a95dd8feddd9a3f2651e1aeba}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|ZFhCyn4Gm2eu60rB@paquier.xyz|Table data compression is broken with pg_dump --compress lz4}}&lt;br /&gt;
** Owner: Tomas Vondra&lt;br /&gt;
** Fixed at: {{PgCommitURL|1a05c1d252993b0a59c58a6daf91a2df9333044f}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|94ae9bca-5ebb-1e68-bb7b-4f32e89fefbe@gmail.com|Valgrind unhappy with LZ4F code in pg_dump}}&lt;br /&gt;
** Owner: Tomas Vondra&lt;br /&gt;
** Fixed at: {{PgCommitURL|3c18d90f8907e53c3021fca13ad046133c480e4d}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230509190247.3rrplhdgem6su6cg@awork3.anarazel.de|walsender performance regression due to logical decoding on standby changes}}&lt;br /&gt;
** Owner: Andres Freund&lt;br /&gt;
** Original commit: {{PgCommitURL|e101dfac}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|bc971f4025c378ce500d86597c34b0ef996d4d8c}}&lt;br /&gt;
&lt;br /&gt;
== Won&#039;t Fix ==&lt;br /&gt;
&lt;br /&gt;
* Is it OK that WL_SOCKET_ACCEPT is less fair on Windows than on Unix (and than the coding before 16) when there are multiple server sockets configured?&lt;br /&gt;
** {{messageLink|CA%2BhUKG%2BA2dk29hr5zRP3HVJQ-_PncNJM6HVQ7aaYLXLRBZU-xw%40mail.gmail.com|WL_SOCKET_ACCEPT fairness on Windows}} has a (blind) patch to fix that, but would need a Windows hacker to test&lt;br /&gt;
** Owner: Thomas Munro&lt;br /&gt;
** Original commit: {{PgCommitURL|7389aad6}}&lt;br /&gt;
** Issue reclassified as a non-critical improvement to be [https://commitfest.postgresql.org/43/4263/ considered for 17]&lt;br /&gt;
&lt;br /&gt;
== Important Dates ==&lt;br /&gt;
&lt;br /&gt;
Current schedule:&lt;br /&gt;
&lt;br /&gt;
* Beta 2: June 29, 2023&lt;br /&gt;
* Beta 1: May 25, 2023&lt;br /&gt;
* Feature Freeze: April 8, 2023 0:00 AoE (&#039;&#039;&#039;Last Day to Commit Features&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Release Management Team]]&lt;br /&gt;
* [[PostgreSQL 15 Open Items]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Open_Items]]&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_16_Open_Items&amp;diff=37977</id>
		<title>PostgreSQL 16 Open Items</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_16_Open_Items&amp;diff=37977"/>
		<updated>2023-06-10T04:36:50Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: /* Open Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Open Issues ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Please place new open items at the end of the list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: If known, please list the Owner of the open item.&lt;br /&gt;
&lt;br /&gt;
* Switch to ICU for 17?&lt;br /&gt;
** Owner: Jeff Davis&lt;br /&gt;
** {{messageLink|82c4c816-06f6-d3e3-ba02-fca4a5cef065@enterprisedb.com|I suggest waiting until next week to commit it and then see what happens}}&lt;br /&gt;
** [https://commitfest.postgresql.org/42/4169/ CF Entry]&lt;br /&gt;
* {{messageLink|e587e2ee-7de0-88a2-10f8-c7cf001bab8c%40postgrespro.ru|psql: Add role&#039;s membership options to the \du+ command}}&lt;br /&gt;
** [https://commitfest.postgresql.org/43/4116/ CF Entry]&lt;br /&gt;
** NOTE: This is not a committed feature for v16&lt;br /&gt;
* {{messageLink|874jp9f5jo.fsf@news-spur.riddles.org.uk|The rules for choosing default ICU locale seem pretty unfriendly}}&lt;br /&gt;
** Owner: Jeff Davis&lt;br /&gt;
* {{messageLink|ZEZDj1H61ryrmY9o@msg.df7cb.de|could not extend file &amp;quot;base/5/3501&amp;quot; with FileFallocate(): Interrupted system call}}&lt;br /&gt;
** Owner: Andres Freund&lt;br /&gt;
** Original commit: {{PgCommitURL|4d330a61bb1}}&lt;br /&gt;
* {{messageLink|CAH2-Wz%3D8Z9qY58bjm_7TAHgtW6RzZ5Ke62q5emdCEy9BAzwhmg%40mail.gmail.com|Cleaning up nbtree after logical decoding on standby work}}&lt;br /&gt;
** Owner: Peter Geoghegan, Andres Freund&lt;br /&gt;
** Original commit: {{PgCommitURL|61b313e4}}&lt;br /&gt;
* {{messageLink|DFBB2D25-DE97-49CA-A60E-07C881EA59A7@winand.at|Inconsistent nulling bitmap in nestloop parameters}}&lt;br /&gt;
** Owner: Tom Lane&lt;br /&gt;
&lt;br /&gt;
== Decisions to Recheck Mid-Beta ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/268fd337-8bb7-92e6-0da2-416c022c11f3%40enterprisedb.com Reconsider a utility_query_id GUC to control if query jumbling of utilities can go through the past string-only mode and the new mode?]&lt;br /&gt;
** Potential owner: Michael Paquier&lt;br /&gt;
&lt;br /&gt;
== Older bugs affecting stable branches ==&lt;br /&gt;
&lt;br /&gt;
=== Live issues ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/CA%2BhUKGK3PGKwcKqzoosamn36YW-fsuTdOPPF1i_rtEO%3DnEYKSg%40mail.gmail.com RecoveryConflictInterrupt() is unsafe in a signal handler]&lt;br /&gt;
** This seems to [https://www.postgresql.org/message-id/447238.1651082925%40sss.pgh.pa.us explain buildfarm failures in 031_recovery_conflict.pl]&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAH2-WzkjjCoq5Y4LeeHJcjYJVxGm3M3SAWZ0%3D6J8K1FPSC9K0w%40mail.gmail.com REINDEX on a system catalog can leave index with two index tuples whose heap TIDs match]&lt;br /&gt;
** In other words, there is a rare case where the HOT invariant is violated. Same HOT chain is indexed twice due to confusion about which precise heap tuple should be indexed.&lt;br /&gt;
** Unclear what the user impact is.&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20201001021609.GC8476%40telsasoft.com memory leak with JIT inlining]&lt;br /&gt;
** [https://www.postgresql.org/message-id/flat/20210331040751.GU4431%40telsasoft.com#cc34872765add8e483e05009212d9d39 Another report of (same?) issue and reproducer] [https://www.postgresql.org/message-id/flat/9f73e655-14b8-feaf-bd66-c0f506224b9e%40stephans-server.de Another report] [https://www.postgresql.org/message-id/flat/16707-f5df308978a55bf8%40postgresql.org Another report] [https://www.postgresql.org/message-id/flat/CAPH-tTxLf44s3CvUUtQpkDr1D8Hxqc2NGDzGXS1ODsfiJ6WSqA%40mail.gmail.com Another report] [https://www.postgresql.org/message-id/flat/a53cacb0-8835-57d6-31e4-4c5ef196de1a@deepbluecap.com Another report]&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/dc9dd229-ed30-6c62-4c41-d733ffff776b%40xs4all.nl TOAST fetches could perhaps occur after the needed data has been removed]&lt;br /&gt;
** The symptom originally reported in the thread was fixed by {{PgCommitURL|9f4f0a0dad4c7422a97d94e4051c08ec6d181dd6}}, but nobody is very happy with the status quo in this area.  Do we need to do more now?&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/ZArVOMifjzE7f8W7%40paquier.xyz Requiring recovery.signal or standby.signal when recovering with a backup_label]&lt;br /&gt;
** This is a rather old behavior that affects all stable branches, still not something that should be backpatched as-is.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|cfcca574-6967-c5ab-7dc3-2c82b6723b99@mail.ru|pg_visibility&#039;s pg_check_visible() yields false positive when working in parallel with autovacuum}}&lt;br /&gt;
** {{messageLink|1649062270.289865713@f403.i.mail.ru|Thread with patch}} [https://commitfest.postgresql.org/43/3739/ CF Entry]&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|1516594.1681482708@sss.pgh.pa.us|We are not compatible with newly-released LLVM 16}}&lt;br /&gt;
** {{messageLink|CA%2BhUKGKNX_%3Df%2B1C4r06WETKTq0G4Z_7q4L4Fxn5WWpMycDj9Fw%40mail.gmail.com|Patch}}&lt;br /&gt;
** Owner: Thomas Munro (volunteer LLVM API change chaser)&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230314174521.74jl6ffqsee5mtug%40awork3.anarazel.de|DROP DATABASE is interruptible}}&lt;br /&gt;
** Additional discussion: {{messageLink|01020187577238cf-da8c0f4a-3ab9-445a-8c74-31ef51439f30-000000%40eu-west-1.amazonses.com|&amp;quot;PANIC: could not open critical system index 2662&amp;quot; - twice}}&lt;br /&gt;
&lt;br /&gt;
=== Fixed issues ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAEze2WgGiw%2BLZt%2BvHf8tWqB_6VxeLsMeoAuod0N%3Dij1q17n5pw%40mail.gmail.com Non-replayable WAL records through overflows and &amp;gt;MaxAllocSize lengths]&lt;br /&gt;
** In other words; we can write xlog records that we can&#039;t read (plus potentially actual WAL corruption); making the instance unrecoverable, and blocks any replication.&lt;br /&gt;
** Exploitation seems limited to WAL records of 2PC and logical replication, and extension-generated WAL.&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
** Fixed at: {{PgCommitURL|8fcb32db98eda1ad2a0c0b40b1cbb5d9a7aa68f0}} and {{PgCommitURL|ffd1b6bb6f8a2ffc929699772610c6925364dbb3}} for HEAD.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/CAC+AXB26a4EmxM2suXxPpJaGrqAdxracd7hskLg-zxtPB50h7A@mail.gmail.com Fix fseek() detection of unseekable files on WIN32]&lt;br /&gt;
** Fixed at: {{PgCommitURL|a923e21631a29dc8b8781d7d02b5003d0df64ca3}} and {{PgCommitURL|765f5df726918bcdcfd16bcc5418e48663d1dd59}}, down to 14.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CAAKRu_bETD%2BAri600h6fRjX2p8rJSeMAUp%3D_y88juqOZgouTSg%40mail.gmail.com|Can&#039;t disable autovacuum cost delay through storage parameter}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|bfac8f8bc4a44c67c9f35b5266676278e4ba1217}}, down to 11.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CAJ7c6TMBTN3rcz4%3DAjYhLPD_w3FFT0Wq_C15jxCDn8U4tZnH1g@mail.gmail.com| EPQ misbehaves for inherited/partitioned tables}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|70b42f279}}, down to 14.&lt;br /&gt;
&lt;br /&gt;
== Non-bugs ==&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|17862-1ab8f74b0f7b0611@postgresql.org|WindowAgg startup costs don&#039;t take into account partition bound.  Can lead to incorrect use of cheap startup plans}}&lt;br /&gt;
** {{messageLink|CAApHDvrB0S5BMv+0-wTTqWFE-BJ0noWqTnDu9QQfjZ2VSpLv_g@mail.gmail.com|Patch to fix and discussion}}&lt;br /&gt;
&lt;br /&gt;
== Resolved Issues ==&lt;br /&gt;
&lt;br /&gt;
=== resolved before 16beta2 ===&lt;br /&gt;
* {{messageLink|CAMbWs4_tuVn9EwwMcggGiZJWWstdXX_ci8FeEU17vs+4nLgw3w@mail.gmail.com|Assert failure and wrong query results due to incorrectly removing PHV}}&lt;br /&gt;
** Owner: Tom Lane&lt;br /&gt;
** Fixed at: {{PgCommitURL|9a2dbc614e6e47da3c49daacec106da32eba9467}}&lt;br /&gt;
* {{messageLink|CAMbWs4-_vwkBij4XOQ5ukxUvLgwTm0kS5_DO9CicUeKbEfKjUw%40mail.gmail.com|Assert failure of the cross-check for nullingrels}}&lt;br /&gt;
** Owner: Tom Lane&lt;br /&gt;
** Original commit: {{PgCommitURL|2489d76c4}}&lt;br /&gt;
** [https://commitfest.postgresql.org/43/4250/ CF Entry]&lt;br /&gt;
** Fixed at: {{PgCommitURL|991a3df22}}&lt;br /&gt;
&lt;br /&gt;
=== resolved before 16beta1 ===&lt;br /&gt;
* {{messageLink|CAHewXNnu7u1aT%3D%3DWjnCRa%2BSzKb6s80hvwPP_9eMvvvtdyFdqjw%40mail.gmail.com|ERROR: wrong varnullingrels (b 5 7) (expected (b)) for Var 3/3}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|d0f952691}}&lt;br /&gt;
* {{messageLink|d46f9265-ff3c-6743-2278-6772598233c2%40pgmasters.net|Possible regression setting GUCs on \connect}}&lt;br /&gt;
** Owner: Alexander Korotkov&lt;br /&gt;
** Discussion on reverting {{PgCommitURL|096dd80f3}}&lt;br /&gt;
** Original commit: {{PgCommitURL|096dd80f3}}&lt;br /&gt;
** Reverted at: {{PgCommitURL|b9a7a822723aebb16cbe7e5fb874e5124745b07e}}&lt;br /&gt;
&lt;br /&gt;
* Planner makes improper clause pushdown decisions due to outer-join-aware-Vars changes&lt;br /&gt;
** {{messageLink|0b819232-4b50-f245-1c7d-c8c61bf41827@postgrespro.ru|Clause accidentally pushed down}}&lt;br /&gt;
** {{messageLink|CAHewXNks3w_Vy9CWoVtHx1XSaeiFpsOzh-zy5eu0Khp1PtG1sA@mail.gmail.com|wrong results due to qual pushdown}}&lt;br /&gt;
** Original commit: {{PgCommitURL|2489d76c4}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|9df8f903eb6758be5a19e66cdf77e922e9329c31}}&lt;br /&gt;
&lt;br /&gt;
* Revert {{PgCommitURL|ec386948948}}, per {{messageLink|20230330105325.y6uvpalspynf2frt@alvherre.pgsql|Re: &amp;quot;variable not found in subplan target list&amp;quot;}}&lt;br /&gt;
** Reverted at {{PgCommitURL|5472743d9e8}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAEZATCWETioXs5kY8vT6BVguY41_wD962VDk%3Du_Nvd7S1UXzuQ%40mail.gmail.com ERROR:  ORDER/GROUP BY expression not found in targetlist]&lt;br /&gt;
** Fixed at: {{PgCommitURL|da5800d5fa636c6e10c9c98402d872c76aa1c8d0}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20230212233711.GA1316@telsasoft.com various elogs hit by sqlsmith (ExecRTCheckPerms() and many prunable partitions)]&lt;br /&gt;
** Fixed at: {{PgCommitURL|c7468c73f7b6e842a53c12eaee5578a76a8fa7a6}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20230228235834.GC30529@telsasoft.com pg_dump: zlib compression fails for empty objects (LOs)]&lt;br /&gt;
** Fixed at: {{PgCommitURL|00d9dcf5bebbb355152a60f0e2120cdf7f9e7ddd}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20230227044910.GO1653@telsasoft.com pg_dump: lz4 compression uses no persistent state and writes a block header for every row]&lt;br /&gt;
** Fixed at: {{PgCommitURL|0070b66fef21e909adb283f7faa7b1978836ad75}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|3590249.1680971629@sss.pgh.pa.us|Assertion failure with parallel full hash join}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|b37d051b0e59e4324e346655a27509507813db79}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|ZDDO6jaESKaBgej0@tamriel.snowman.net|De-revert &amp;quot;Add support for Kerberos credential delegation&amp;quot;}}&lt;br /&gt;
** Owner: Stephen Frost&lt;br /&gt;
** Original commit: {{PgCommitURL|3d4fa227bce4294ce1cc214b4a9d3b7caa3f0454}}&lt;br /&gt;
** Revert: ({{PgCommitURL|3d03b24c350ab060bb223623bdff38835bd7afd0}}&lt;br /&gt;
** De-Revert: {{PgCommitURL|6633cfb21691840c33816a6dacaca0b504efb895}}&lt;br /&gt;
** Resolved at: {{PgCommitURL|f7431bca8b0138bdbce7025871560d39119565a0}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|c39be3c5-c1a5-1e33-1024-16f527e251a4@enterprisedb.com|SSL tests break on non-existing system CA pool}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|0b5d1fb36adda612bd3d5d032463a6eeb0729237}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CAD21AoBS7o6Ljt_vfqPQPf67AhzKu3fR0iqk8B%3DvVYczMugKMQ%40mail.gmail.com|VacuumUpdateCosts() logging condition incorrect for some initial values of vacuum_cost_delay}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|a9781ae11ba2fdb44a3a72c9a7ebb727140b25c5}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CA%2BhUKGJ-ZPJwKHVLbqye92-ZXeLoCHu5wJL6L6HhNP7FkJ%3DmeA%40mail.gmail.com|check_strxfrm_bug()}}&lt;br /&gt;
** Owner: Thomas Munro&lt;br /&gt;
** Fixed at: {{PgCommitURL|7d3d72b55edd1b7552a9a358991555994efab0e9}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230317230930.nhsgk3qfk7f4axls%40awork3.anarazel.de|Should we remove vacuum_defer_cleanup_age?}}&lt;br /&gt;
** Owner: Andres Freund&lt;br /&gt;
** Fixed at: {{PgCommitURL|1118cd37eb61e6a2428f457a8b2026a7bb3f801a}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|2fefa454-5a70-2174-ddbf-4a0e41537139@gmail.com|Add two missing tests in 035_standby_logical_decoding.pl}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|376dc820531bafcbf105fff74c5b14c23d9950af}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|a6e04b1d20c2e9cece9b64bb5b36ebfdc3a9031b}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|b32bed1b-0746-9b20-1472-4bdc9ca66d52@gmail.com|Performance regression due to SQLValueFunction removal}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|d8c3106bb60e4f87be595f241e173ba3c2b7aa2c}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230419172326.dhgyo4wrrhulovt6%40awork3.anarazel.de|pg_stat_io not tracking smgrwriteback() is confusing}}&lt;br /&gt;
** Owner: Andres Freund&lt;br /&gt;
** Fixed at: {{PgCommitURL|093e5c57d506783a95dd8feddd9a3f2651e1aeba}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|ZFhCyn4Gm2eu60rB@paquier.xyz|Table data compression is broken with pg_dump --compress lz4}}&lt;br /&gt;
** Owner: Tomas Vondra&lt;br /&gt;
** Fixed at: {{PgCommitURL|1a05c1d252993b0a59c58a6daf91a2df9333044f}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|94ae9bca-5ebb-1e68-bb7b-4f32e89fefbe@gmail.com|Valgrind unhappy with LZ4F code in pg_dump}}&lt;br /&gt;
** Owner: Tomas Vondra&lt;br /&gt;
** Fixed at: {{PgCommitURL|3c18d90f8907e53c3021fca13ad046133c480e4d}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230509190247.3rrplhdgem6su6cg@awork3.anarazel.de|walsender performance regression due to logical decoding on standby changes}}&lt;br /&gt;
** Owner: Andres Freund&lt;br /&gt;
** Original commit: {{PgCommitURL|e101dfac}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|bc971f4025c378ce500d86597c34b0ef996d4d8c}}&lt;br /&gt;
&lt;br /&gt;
== Won&#039;t Fix ==&lt;br /&gt;
&lt;br /&gt;
* Is it OK that WL_SOCKET_ACCEPT is less fair on Windows than on Unix (and than the coding before 16) when there are multiple server sockets configured?&lt;br /&gt;
** {{messageLink|CA%2BhUKG%2BA2dk29hr5zRP3HVJQ-_PncNJM6HVQ7aaYLXLRBZU-xw%40mail.gmail.com|WL_SOCKET_ACCEPT fairness on Windows}} has a (blind) patch to fix that, but would need a Windows hacker to test&lt;br /&gt;
** Owner: Thomas Munro&lt;br /&gt;
** Original commit: {{PgCommitURL|7389aad6}}&lt;br /&gt;
** Issue reclassified as a non-critical improvement to be [https://commitfest.postgresql.org/43/4263/ considered for 17]&lt;br /&gt;
&lt;br /&gt;
== Important Dates ==&lt;br /&gt;
&lt;br /&gt;
Current schedule:&lt;br /&gt;
&lt;br /&gt;
* Beta 2: TBD&lt;br /&gt;
* Beta 1: May 25, 2023&lt;br /&gt;
* Feature Freeze: April 8, 2023 0:00 AoE (&#039;&#039;&#039;Last Day to Commit Features&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Release Management Team]]&lt;br /&gt;
* [[PostgreSQL 15 Open Items]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Open_Items]]&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_16_Open_Items&amp;diff=37847</id>
		<title>PostgreSQL 16 Open Items</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_16_Open_Items&amp;diff=37847"/>
		<updated>2023-05-21T18:04:17Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: Mark walsender issue as fixed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Open Issues ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Please place new open items at the end of the list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: If known, please list the Owner of the open item.&lt;br /&gt;
&lt;br /&gt;
* Switch to ICU for 17?&lt;br /&gt;
** Owner: Jeff Davis&lt;br /&gt;
** {{messageLink|82c4c816-06f6-d3e3-ba02-fca4a5cef065@enterprisedb.com|I suggest waiting until next week to commit it and then see what happens}}&lt;br /&gt;
** [https://commitfest.postgresql.org/42/4169/ CF Entry]&lt;br /&gt;
* {{messageLink|e587e2ee-7de0-88a2-10f8-c7cf001bab8c%40postgrespro.ru|psql: Add role&#039;s membership options to the \du+ command}}&lt;br /&gt;
** [https://commitfest.postgresql.org/43/4116/ CF Entry]&lt;br /&gt;
** NOTE: This is not a committed feature for v16&lt;br /&gt;
* {{messageLink|874jp9f5jo.fsf@news-spur.riddles.org.uk|The rules for choosing default ICU locale seem pretty unfriendly}}&lt;br /&gt;
** Owner: Jeff Davis&lt;br /&gt;
* {{messageLink|CAMbWs4-_vwkBij4XOQ5ukxUvLgwTm0kS5_DO9CicUeKbEfKjUw%40mail.gmail.com|Assert failure of the cross-check for nullingrels}}&lt;br /&gt;
** Owner: Tom Lane&lt;br /&gt;
** Original commit: {{PgCommitURL|2489d76c4}}&lt;br /&gt;
** [https://commitfest.postgresql.org/43/4250/ CF Entry]&lt;br /&gt;
* {{messageLink|CAHewXNnu7u1aT%3D%3DWjnCRa%2BSzKb6s80hvwPP_9eMvvvtdyFdqjw%40mail.gmail.com|ERROR: wrong varnullingrels (b 5 7) (expected (b)) for Var 3/3}}&lt;br /&gt;
&lt;br /&gt;
== Decisions to Recheck Mid-Beta ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/268fd337-8bb7-92e6-0da2-416c022c11f3%40enterprisedb.com Reconsider a utility_query_id GUC to control if query jumbling of utilities can go through the past string-only mode and the new mode?]&lt;br /&gt;
** Potential owner: Michael Paquier&lt;br /&gt;
&lt;br /&gt;
== Older bugs affecting stable branches ==&lt;br /&gt;
&lt;br /&gt;
=== Live issues ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/CA%2BhUKGK3PGKwcKqzoosamn36YW-fsuTdOPPF1i_rtEO%3DnEYKSg%40mail.gmail.com RecoveryConflictInterrupt() is unsafe in a signal handler]&lt;br /&gt;
** This seems to [https://www.postgresql.org/message-id/447238.1651082925%40sss.pgh.pa.us explain buildfarm failures in 031_recovery_conflict.pl]&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAH2-WzkjjCoq5Y4LeeHJcjYJVxGm3M3SAWZ0%3D6J8K1FPSC9K0w%40mail.gmail.com REINDEX on a system catalog can leave index with two index tuples whose heap TIDs match]&lt;br /&gt;
** In other words, there is a rare case where the HOT invariant is violated. Same HOT chain is indexed twice due to confusion about which precise heap tuple should be indexed.&lt;br /&gt;
** Unclear what the user impact is.&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20201001021609.GC8476%40telsasoft.com memory leak with JIT inlining]&lt;br /&gt;
** [https://www.postgresql.org/message-id/flat/20210331040751.GU4431%40telsasoft.com#cc34872765add8e483e05009212d9d39 Another report of (same?) issue and reproducer] [https://www.postgresql.org/message-id/flat/9f73e655-14b8-feaf-bd66-c0f506224b9e%40stephans-server.de Another report] [https://www.postgresql.org/message-id/flat/16707-f5df308978a55bf8%40postgresql.org Another report] [https://www.postgresql.org/message-id/flat/CAPH-tTxLf44s3CvUUtQpkDr1D8Hxqc2NGDzGXS1ODsfiJ6WSqA%40mail.gmail.com Another report] [https://www.postgresql.org/message-id/flat/a53cacb0-8835-57d6-31e4-4c5ef196de1a@deepbluecap.com Another report]&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/dc9dd229-ed30-6c62-4c41-d733ffff776b%40xs4all.nl TOAST fetches could perhaps occur after the needed data has been removed]&lt;br /&gt;
** The symptom originally reported in the thread was fixed by {{PgCommitURL|9f4f0a0dad4c7422a97d94e4051c08ec6d181dd6}}, but nobody is very happy with the status quo in this area.  Do we need to do more now?&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/ZArVOMifjzE7f8W7%40paquier.xyz Requiring recovery.signal or standby.signal when recovering with a backup_label]&lt;br /&gt;
** This is a rather old behavior that affects all stable branches, still not something that should be backpatched as-is.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|cfcca574-6967-c5ab-7dc3-2c82b6723b99@mail.ru|pg_visibility&#039;s pg_check_visible() yields false positive when working in parallel with autovacuum}}&lt;br /&gt;
** {{messageLink|1649062270.289865713@f403.i.mail.ru|Thread with patch}} [https://commitfest.postgresql.org/43/3739/ CF Entry]&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|17862-1ab8f74b0f7b0611@postgresql.org|WindowAgg startup costs don&#039;t take into account partition bound.  Can lead to incorrect use of cheap startup plans}}&lt;br /&gt;
** {{messageLink|CAApHDvrB0S5BMv+0-wTTqWFE-BJ0noWqTnDu9QQfjZ2VSpLv_g@mail.gmail.com|Patch to fix and discussion}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|1516594.1681482708@sss.pgh.pa.us|We are not compatible with newly-released LLVM 16}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230314174521.74jl6ffqsee5mtug%40awork3.anarazel.de|DROP DATABASE is interruptible}}&lt;br /&gt;
** Additional discussion: {{messageLink|01020187577238cf-da8c0f4a-3ab9-445a-8c74-31ef51439f30-000000%40eu-west-1.amazonses.com|&amp;quot;PANIC: could not open critical system index 2662&amp;quot; - twice}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CAJ7c6TMBTN3rcz4%3DAjYhLPD_w3FFT0Wq_C15jxCDn8U4tZnH1g@mail.gmail.com| EPQ misbehaves for inherited/partitioned tables}}&lt;br /&gt;
** Owner: Tom Lane (86dc90056)&lt;br /&gt;
&lt;br /&gt;
=== Fixed issues ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAEze2WgGiw%2BLZt%2BvHf8tWqB_6VxeLsMeoAuod0N%3Dij1q17n5pw%40mail.gmail.com Non-replayable WAL records through overflows and &amp;gt;MaxAllocSize lengths]&lt;br /&gt;
** In other words; we can write xlog records that we can&#039;t read (plus potentially actual WAL corruption); making the instance unrecoverable, and blocks any replication.&lt;br /&gt;
** Exploitation seems limited to WAL records of 2PC and logical replication, and extension-generated WAL.&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
** Fixed at: {{PgCommitURL|8fcb32db98eda1ad2a0c0b40b1cbb5d9a7aa68f0}} and {{PgCommitURL|ffd1b6bb6f8a2ffc929699772610c6925364dbb3}} for HEAD.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/CAC+AXB26a4EmxM2suXxPpJaGrqAdxracd7hskLg-zxtPB50h7A@mail.gmail.com Fix fseek() detection of unseekable files on WIN32]&lt;br /&gt;
** Fixed at: {{PgCommitURL|a923e21631a29dc8b8781d7d02b5003d0df64ca3}} and {{PgCommitURL|765f5df726918bcdcfd16bcc5418e48663d1dd59}}, down to 14.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CAAKRu_bETD%2BAri600h6fRjX2p8rJSeMAUp%3D_y88juqOZgouTSg%40mail.gmail.com|Can&#039;t disable autovacuum cost delay through storage parameter}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|bfac8f8bc4a44c67c9f35b5266676278e4ba1217}}, down to 11.&lt;br /&gt;
&lt;br /&gt;
== Non-bugs ==&lt;br /&gt;
&lt;br /&gt;
== Resolved Issues ==&lt;br /&gt;
&lt;br /&gt;
=== resolved before 16beta1 ===&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|d46f9265-ff3c-6743-2278-6772598233c2%40pgmasters.net|Possible regression setting GUCs on \connect}}&lt;br /&gt;
** Owner: Alexander Korotkov&lt;br /&gt;
** Discussion on reverting {{PgCommitURL|096dd80f3}}&lt;br /&gt;
** Original commit: {{PgCommitURL|096dd80f3}}&lt;br /&gt;
** Fixed at (bug only): {{PgCommitURL|db93e739ac61332126207b16f14da93f8ecac594}}&lt;br /&gt;
** Fixed at (feature reverted): {{PgCommitURL|b9a7a822723aebb16cbe7e5fb874e5124745b07e}}&lt;br /&gt;
&lt;br /&gt;
* Planner makes improper clause pushdown decisions due to outer-join-aware-Vars changes&lt;br /&gt;
** {{messageLink|0b819232-4b50-f245-1c7d-c8c61bf41827@postgrespro.ru|Clause accidentally pushed down}}&lt;br /&gt;
** {{messageLink|CAHewXNks3w_Vy9CWoVtHx1XSaeiFpsOzh-zy5eu0Khp1PtG1sA@mail.gmail.com|wrong results due to qual pushdown}}&lt;br /&gt;
** Original commit: {{PgCommitURL|2489d76c4}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|9df8f903eb6758be5a19e66cdf77e922e9329c31}}&lt;br /&gt;
&lt;br /&gt;
* Revert {{PgCommitURL|ec386948948}}, per {{messageLink|20230330105325.y6uvpalspynf2frt@alvherre.pgsql|Re: &amp;quot;variable not found in subplan target list&amp;quot;}}&lt;br /&gt;
** Reverted at {{PgCommitURL|5472743d9e8}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAEZATCWETioXs5kY8vT6BVguY41_wD962VDk%3Du_Nvd7S1UXzuQ%40mail.gmail.com ERROR:  ORDER/GROUP BY expression not found in targetlist]&lt;br /&gt;
** Fixed at: {{PgCommitURL|da5800d5fa636c6e10c9c98402d872c76aa1c8d0}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20230212233711.GA1316@telsasoft.com various elogs hit by sqlsmith (ExecRTCheckPerms() and many prunable partitions)]&lt;br /&gt;
** Fixed at: {{PgCommitURL|c7468c73f7b6e842a53c12eaee5578a76a8fa7a6}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20230228235834.GC30529@telsasoft.com pg_dump: zlib compression fails for empty objects (LOs)]&lt;br /&gt;
** Fixed at: {{PgCommitURL|00d9dcf5bebbb355152a60f0e2120cdf7f9e7ddd}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20230227044910.GO1653@telsasoft.com pg_dump: lz4 compression uses no persistent state and writes a block header for every row]&lt;br /&gt;
** Fixed at: {{PgCommitURL|0070b66fef21e909adb283f7faa7b1978836ad75}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|3590249.1680971629@sss.pgh.pa.us|Assertion failure with parallel full hash join}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|b37d051b0e59e4324e346655a27509507813db79}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|ZDDO6jaESKaBgej0@tamriel.snowman.net|De-revert &amp;quot;Add support for Kerberos credential delegation&amp;quot;}}&lt;br /&gt;
** Owner: Stephen Frost&lt;br /&gt;
** Original commit: {{PgCommitURL|3d4fa227bce4294ce1cc214b4a9d3b7caa3f0454}}&lt;br /&gt;
** Revert: ({{PgCommitURL|3d03b24c350ab060bb223623bdff38835bd7afd0}}&lt;br /&gt;
** De-Revert: {{PgCommitURL|6633cfb21691840c33816a6dacaca0b504efb895}}&lt;br /&gt;
** Resolved at: {{PgCommitURL|f7431bca8b0138bdbce7025871560d39119565a0}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|c39be3c5-c1a5-1e33-1024-16f527e251a4@enterprisedb.com|SSL tests break on non-existing system CA pool}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|0b5d1fb36adda612bd3d5d032463a6eeb0729237}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CAD21AoBS7o6Ljt_vfqPQPf67AhzKu3fR0iqk8B%3DvVYczMugKMQ%40mail.gmail.com|VacuumUpdateCosts() logging condition incorrect for some initial values of vacuum_cost_delay}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|a9781ae11ba2fdb44a3a72c9a7ebb727140b25c5}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CA%2BhUKGJ-ZPJwKHVLbqye92-ZXeLoCHu5wJL6L6HhNP7FkJ%3DmeA%40mail.gmail.com|check_strxfrm_bug()}}&lt;br /&gt;
** Owner: Thomas Munro&lt;br /&gt;
** Fixed at: {{PgCommitURL|7d3d72b55edd1b7552a9a358991555994efab0e9}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230317230930.nhsgk3qfk7f4axls%40awork3.anarazel.de|Should we remove vacuum_defer_cleanup_age?}}&lt;br /&gt;
** Owner: Andres Freund&lt;br /&gt;
** Fixed at: {{PgCommitURL|1118cd37eb61e6a2428f457a8b2026a7bb3f801a}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|2fefa454-5a70-2174-ddbf-4a0e41537139@gmail.com|Add two missing tests in 035_standby_logical_decoding.pl}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|376dc820531bafcbf105fff74c5b14c23d9950af}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|a6e04b1d20c2e9cece9b64bb5b36ebfdc3a9031b}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|b32bed1b-0746-9b20-1472-4bdc9ca66d52@gmail.com|Performance regression due to SQLValueFunction removal}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|d8c3106bb60e4f87be595f241e173ba3c2b7aa2c}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230419172326.dhgyo4wrrhulovt6%40awork3.anarazel.de|pg_stat_io not tracking smgrwriteback() is confusing}}&lt;br /&gt;
** Owner: Andres Freund&lt;br /&gt;
** Fixed at: {{PgCommitURL|093e5c57d506783a95dd8feddd9a3f2651e1aeba}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|ZFhCyn4Gm2eu60rB@paquier.xyz|Table data compression is broken with pg_dump --compress lz4}}&lt;br /&gt;
** Owner: Tomas Vondra&lt;br /&gt;
** Fixed at: {{PgCommitURL|1a05c1d252993b0a59c58a6daf91a2df9333044f}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|94ae9bca-5ebb-1e68-bb7b-4f32e89fefbe@gmail.com|Valgrind unhappy with LZ4F code in pg_dump}}&lt;br /&gt;
** Owner: Tomas Vondra&lt;br /&gt;
** Fixed at: {{PgCommitURL|3c18d90f8907e53c3021fca13ad046133c480e4d}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230509190247.3rrplhdgem6su6cg@awork3.anarazel.de|walsender performance regression due to logical decoding on standby changes}}&lt;br /&gt;
** Owner: Andres Freund&lt;br /&gt;
** Original commit: {{PgCommitURL|e101dfac}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|bc971f4025c378ce500d86597c34b0ef996d4d8c}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Won&#039;t Fix ==&lt;br /&gt;
&lt;br /&gt;
* Is it OK that WL_SOCKET_ACCEPT is less fair on Windows than on Unix (and than the coding before 16) when there are multiple server sockets configured?&lt;br /&gt;
** {{messageLink|CA%2BhUKG%2BA2dk29hr5zRP3HVJQ-_PncNJM6HVQ7aaYLXLRBZU-xw%40mail.gmail.com|WL_SOCKET_ACCEPT fairness on Windows}} has a (blind) patch to fix that, but would need a Windows hacker to test&lt;br /&gt;
** Owner: Thomas Munro&lt;br /&gt;
** Original commit: {{PgCommitURL|7389aad6}}&lt;br /&gt;
** Issue reclassified as a non-critical improvement to be [https://commitfest.postgresql.org/43/4263/ considered for 17]&lt;br /&gt;
&lt;br /&gt;
== Important Dates ==&lt;br /&gt;
&lt;br /&gt;
Current schedule:&lt;br /&gt;
&lt;br /&gt;
* Beta 2: TBD&lt;br /&gt;
* Beta 1: May 25, 2023&lt;br /&gt;
* Feature Freeze: April 8, 2023 0:00 AoE (&#039;&#039;&#039;Last Day to Commit Features&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Release Management Team]]&lt;br /&gt;
* [[PostgreSQL 15 Open Items]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Open_Items]]&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_16_Open_Items&amp;diff=37833</id>
		<title>PostgreSQL 16 Open Items</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_16_Open_Items&amp;diff=37833"/>
		<updated>2023-05-17T19:29:02Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Open Issues ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Please place new open items at the end of the list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: If known, please list the Owner of the open item.&lt;br /&gt;
&lt;br /&gt;
* Switch to ICU for 17?&lt;br /&gt;
** Owner: Jeff Davis&lt;br /&gt;
** {{messageLink|82c4c816-06f6-d3e3-ba02-fca4a5cef065@enterprisedb.com|I suggest waiting until next week to commit it and then see what happens}}&lt;br /&gt;
** [https://commitfest.postgresql.org/42/4169/ CF Entry]&lt;br /&gt;
* {{messageLink|e587e2ee-7de0-88a2-10f8-c7cf001bab8c%40postgrespro.ru|psql: Add role&#039;s membership options to the \du+ command}}&lt;br /&gt;
** [https://commitfest.postgresql.org/43/4116/ CF Entry]&lt;br /&gt;
** NOTE: This is not a committed feature for v16&lt;br /&gt;
* {{messageLink|874jp9f5jo.fsf@news-spur.riddles.org.uk|The rules for choosing default ICU locale seem pretty unfriendly}}&lt;br /&gt;
** Owner: Jeff Davis&lt;br /&gt;
* {{messageLink|94ae9bca-5ebb-1e68-bb7b-4f32e89fefbe@gmail.com|Valgrind unhappy with LZ4F code in pg_dump}}&lt;br /&gt;
** Owner: Tomas Vondra&lt;br /&gt;
* {{messageLink|ZFhCyn4Gm2eu60rB@paquier.xyz|Table data compression is broken with pg_dump --compress lz4}}&lt;br /&gt;
** Owner: Tomas Vondra&lt;br /&gt;
* {{messageLink|CAMbWs4-_vwkBij4XOQ5ukxUvLgwTm0kS5_DO9CicUeKbEfKjUw%40mail.gmail.com|Assert failure of the cross-check for nullingrels}}&lt;br /&gt;
** Owner: Tom Lane&lt;br /&gt;
** Original commit: {{PgCommitURL|2489d76c4}}&lt;br /&gt;
** [https://commitfest.postgresql.org/43/4250/ CF Entry]&lt;br /&gt;
* {{messageLink|20230509190247.3rrplhdgem6su6cg@awork3.anarazel.de|walsender performance regression due to logical decoding on standby changes}}&lt;br /&gt;
** Owner: Andres Freund&lt;br /&gt;
** Original commit: {{PgCommitURL|e101dfac}}&lt;br /&gt;
** {{messageLink|CALj2ACWeo64RSqf8tDbnSSUm_vbpK5GYdDiiFQk8E3Fg38mBdw@mail.gmail.com|Patch sent}}&lt;br /&gt;
&lt;br /&gt;
== Decisions to Recheck Mid-Beta ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/268fd337-8bb7-92e6-0da2-416c022c11f3%40enterprisedb.com Reconsider a utility_query_id GUC to control if query jumbling of utilities can go through the past string-only mode and the new mode?]&lt;br /&gt;
** Potential owner: Michael Paquier&lt;br /&gt;
&lt;br /&gt;
== Older bugs affecting stable branches ==&lt;br /&gt;
&lt;br /&gt;
=== Live issues ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/CA%2BhUKGK3PGKwcKqzoosamn36YW-fsuTdOPPF1i_rtEO%3DnEYKSg%40mail.gmail.com RecoveryConflictInterrupt() is unsafe in a signal handler]&lt;br /&gt;
** This seems to [https://www.postgresql.org/message-id/447238.1651082925%40sss.pgh.pa.us explain buildfarm failures in 031_recovery_conflict.pl]&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAH2-WzkjjCoq5Y4LeeHJcjYJVxGm3M3SAWZ0%3D6J8K1FPSC9K0w%40mail.gmail.com REINDEX on a system catalog can leave index with two index tuples whose heap TIDs match]&lt;br /&gt;
** In other words, there is a rare case where the HOT invariant is violated. Same HOT chain is indexed twice due to confusion about which precise heap tuple should be indexed.&lt;br /&gt;
** Unclear what the user impact is.&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20201001021609.GC8476%40telsasoft.com memory leak with JIT inlining]&lt;br /&gt;
** [https://www.postgresql.org/message-id/flat/20210331040751.GU4431%40telsasoft.com#cc34872765add8e483e05009212d9d39 Another report of (same?) issue and reproducer] [https://www.postgresql.org/message-id/flat/9f73e655-14b8-feaf-bd66-c0f506224b9e%40stephans-server.de Another report] [https://www.postgresql.org/message-id/flat/16707-f5df308978a55bf8%40postgresql.org Another report] [https://www.postgresql.org/message-id/flat/CAPH-tTxLf44s3CvUUtQpkDr1D8Hxqc2NGDzGXS1ODsfiJ6WSqA%40mail.gmail.com Another report] [https://www.postgresql.org/message-id/flat/a53cacb0-8835-57d6-31e4-4c5ef196de1a@deepbluecap.com Another report]&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/dc9dd229-ed30-6c62-4c41-d733ffff776b%40xs4all.nl TOAST fetches could perhaps occur after the needed data has been removed]&lt;br /&gt;
** The symptom originally reported in the thread was fixed by {{PgCommitURL|9f4f0a0dad4c7422a97d94e4051c08ec6d181dd6}}, but nobody is very happy with the status quo in this area.  Do we need to do more now?&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/ZArVOMifjzE7f8W7%40paquier.xyz Requiring recovery.signal or standby.signal when recovering with a backup_label]&lt;br /&gt;
** This is a rather old behavior that affects all stable branches, still not something that should be backpatched as-is.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|cfcca574-6967-c5ab-7dc3-2c82b6723b99@mail.ru|pg_visibility&#039;s pg_check_visible() yields false positive when working in parallel with autovacuum}}&lt;br /&gt;
** {{messageLink|1649062270.289865713@f403.i.mail.ru|Thread with patch}} [https://commitfest.postgresql.org/43/3739/ CF Entry]&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|17862-1ab8f74b0f7b0611@postgresql.org|WindowAgg startup costs don&#039;t take into account partition bound.  Can lead to incorrect use of cheap startup plans}}&lt;br /&gt;
** {{messageLink|CAApHDvrB0S5BMv+0-wTTqWFE-BJ0noWqTnDu9QQfjZ2VSpLv_g@mail.gmail.com|Patch to fix and discussion}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|1516594.1681482708@sss.pgh.pa.us|We are not compatible with newly-released LLVM 16}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230314174521.74jl6ffqsee5mtug%40awork3.anarazel.de|DROP DATABASE is interruptible}}&lt;br /&gt;
** Additional discussion: {{messageLink|01020187577238cf-da8c0f4a-3ab9-445a-8c74-31ef51439f30-000000%40eu-west-1.amazonses.com|&amp;quot;PANIC: could not open critical system index 2662&amp;quot; - twice}}&lt;br /&gt;
&lt;br /&gt;
=== Fixed issues ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAEze2WgGiw%2BLZt%2BvHf8tWqB_6VxeLsMeoAuod0N%3Dij1q17n5pw%40mail.gmail.com Non-replayable WAL records through overflows and &amp;gt;MaxAllocSize lengths]&lt;br /&gt;
** In other words; we can write xlog records that we can&#039;t read (plus potentially actual WAL corruption); making the instance unrecoverable, and blocks any replication.&lt;br /&gt;
** Exploitation seems limited to WAL records of 2PC and logical replication, and extension-generated WAL.&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
** Fixed at: {{PgCommitURL|8fcb32db98eda1ad2a0c0b40b1cbb5d9a7aa68f0}} and {{PgCommitURL|ffd1b6bb6f8a2ffc929699772610c6925364dbb3}} for HEAD.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/CAC+AXB26a4EmxM2suXxPpJaGrqAdxracd7hskLg-zxtPB50h7A@mail.gmail.com Fix fseek() detection of unseekable files on WIN32]&lt;br /&gt;
** Fixed at: {{PgCommitURL|a923e21631a29dc8b8781d7d02b5003d0df64ca3}} and {{PgCommitURL|765f5df726918bcdcfd16bcc5418e48663d1dd59}}, down to 14.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CAAKRu_bETD%2BAri600h6fRjX2p8rJSeMAUp%3D_y88juqOZgouTSg%40mail.gmail.com|Can&#039;t disable autovacuum cost delay through storage parameter}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|bfac8f8bc4a44c67c9f35b5266676278e4ba1217}}, down to 11.&lt;br /&gt;
&lt;br /&gt;
== Non-bugs ==&lt;br /&gt;
&lt;br /&gt;
== Resolved Issues ==&lt;br /&gt;
&lt;br /&gt;
=== resolved before 16beta1 ===&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|d46f9265-ff3c-6743-2278-6772598233c2%40pgmasters.net|Possible regression setting GUCs on \connect}}&lt;br /&gt;
** Owner: Alexander Korotkov&lt;br /&gt;
** Discussion on reverting {{PgCommitURL|096dd80f3}}&lt;br /&gt;
** Original commit: {{PgCommitURL|096dd80f3}}&lt;br /&gt;
** Fixed at (bug only): {{PgCommitURL|db93e739ac61332126207b16f14da93f8ecac594}}&lt;br /&gt;
** Fixed at (feature reverted): {{PgCommitURL|b9a7a822723aebb16cbe7e5fb874e5124745b07e}}&lt;br /&gt;
&lt;br /&gt;
* Planner makes improper clause pushdown decisions due to outer-join-aware-Vars changes&lt;br /&gt;
** {{messageLink|0b819232-4b50-f245-1c7d-c8c61bf41827@postgrespro.ru|Clause accidentally pushed down}}&lt;br /&gt;
** {{messageLink|CAHewXNks3w_Vy9CWoVtHx1XSaeiFpsOzh-zy5eu0Khp1PtG1sA@mail.gmail.com|wrong results due to qual pushdown}}&lt;br /&gt;
** Original commit: {{PgCommitURL|2489d76c4}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|9df8f903eb6758be5a19e66cdf77e922e9329c31}}&lt;br /&gt;
&lt;br /&gt;
* Revert {{PgCommitURL|ec386948948}}, per {{messageLink|20230330105325.y6uvpalspynf2frt@alvherre.pgsql|Re: &amp;quot;variable not found in subplan target list&amp;quot;}}&lt;br /&gt;
** Reverted at {{PgCommitURL|5472743d9e8}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAEZATCWETioXs5kY8vT6BVguY41_wD962VDk%3Du_Nvd7S1UXzuQ%40mail.gmail.com ERROR:  ORDER/GROUP BY expression not found in targetlist]&lt;br /&gt;
** Fixed at: {{PgCommitURL|da5800d5fa636c6e10c9c98402d872c76aa1c8d0}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20230212233711.GA1316@telsasoft.com various elogs hit by sqlsmith (ExecRTCheckPerms() and many prunable partitions)]&lt;br /&gt;
** Fixed at: {{PgCommitURL|c7468c73f7b6e842a53c12eaee5578a76a8fa7a6}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20230228235834.GC30529@telsasoft.com pg_dump: zlib compression fails for empty objects (LOs)]&lt;br /&gt;
** Fixed at: {{PgCommitURL|00d9dcf5bebbb355152a60f0e2120cdf7f9e7ddd}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20230227044910.GO1653@telsasoft.com pg_dump: lz4 compression uses no persistent state and writes a block header for every row]&lt;br /&gt;
** Fixed at: {{PgCommitURL|0070b66fef21e909adb283f7faa7b1978836ad75}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|3590249.1680971629@sss.pgh.pa.us|Assertion failure with parallel full hash join}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|b37d051b0e59e4324e346655a27509507813db79}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|ZDDO6jaESKaBgej0@tamriel.snowman.net|De-revert &amp;quot;Add support for Kerberos credential delegation&amp;quot;}}&lt;br /&gt;
** Owner: Stephen Frost&lt;br /&gt;
** Original commit: {{PgCommitURL|3d4fa227bce4294ce1cc214b4a9d3b7caa3f0454}}&lt;br /&gt;
** Revert: ({{PgCommitURL|3d03b24c350ab060bb223623bdff38835bd7afd0}}&lt;br /&gt;
** De-Revert: {{PgCommitURL|6633cfb21691840c33816a6dacaca0b504efb895}}&lt;br /&gt;
** Resolved at: {{PgCommitURL|f7431bca8b0138bdbce7025871560d39119565a0}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|c39be3c5-c1a5-1e33-1024-16f527e251a4@enterprisedb.com|SSL tests break on non-existing system CA pool}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|0b5d1fb36adda612bd3d5d032463a6eeb0729237}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CAD21AoBS7o6Ljt_vfqPQPf67AhzKu3fR0iqk8B%3DvVYczMugKMQ%40mail.gmail.com|VacuumUpdateCosts() logging condition incorrect for some initial values of vacuum_cost_delay}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|a9781ae11ba2fdb44a3a72c9a7ebb727140b25c5}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CA%2BhUKGJ-ZPJwKHVLbqye92-ZXeLoCHu5wJL6L6HhNP7FkJ%3DmeA%40mail.gmail.com|check_strxfrm_bug()}}&lt;br /&gt;
** Owner: Thomas Munro&lt;br /&gt;
** Fixed at: {{PgCommitURL|7d3d72b55edd1b7552a9a358991555994efab0e9}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230317230930.nhsgk3qfk7f4axls%40awork3.anarazel.de|Should we remove vacuum_defer_cleanup_age?}}&lt;br /&gt;
** Owner: Andres Freund&lt;br /&gt;
** Fixed at: {{PgCommitURL|1118cd37eb61e6a2428f457a8b2026a7bb3f801a}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|2fefa454-5a70-2174-ddbf-4a0e41537139@gmail.com|Add two missing tests in 035_standby_logical_decoding.pl}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|376dc820531bafcbf105fff74c5b14c23d9950af}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|a6e04b1d20c2e9cece9b64bb5b36ebfdc3a9031b}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|b32bed1b-0746-9b20-1472-4bdc9ca66d52@gmail.com|Performance regression due to SQLValueFunction removal}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|d8c3106bb60e4f87be595f241e173ba3c2b7aa2c}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230419172326.dhgyo4wrrhulovt6%40awork3.anarazel.de|pg_stat_io not tracking smgrwriteback() is confusing}}&lt;br /&gt;
** Owner: Andres Freund&lt;br /&gt;
** Fixed at: {{PgCommitURL|093e5c57d506783a95dd8feddd9a3f2651e1aeba}}&lt;br /&gt;
&lt;br /&gt;
== Won&#039;t Fix ==&lt;br /&gt;
&lt;br /&gt;
* Is it OK that WL_SOCKET_ACCEPT is less fair on Windows than on Unix (and than the coding before 16) when there are multiple server sockets configured?&lt;br /&gt;
** {{messageLink|CA%2BhUKG%2BA2dk29hr5zRP3HVJQ-_PncNJM6HVQ7aaYLXLRBZU-xw%40mail.gmail.com|WL_SOCKET_ACCEPT fairness on Windows}} has a (blind) patch to fix that, but would need a Windows hacker to test&lt;br /&gt;
** Owner: Thomas Munro&lt;br /&gt;
** Original commit: {{PgCommitURL|7389aad6}}&lt;br /&gt;
** Issue reclassified as a non-critical improvement to be [https://commitfest.postgresql.org/43/4263/ considered for 17]&lt;br /&gt;
&lt;br /&gt;
== Important Dates ==&lt;br /&gt;
&lt;br /&gt;
Current schedule:&lt;br /&gt;
&lt;br /&gt;
* Beta 2: TBD&lt;br /&gt;
* Beta 1: May 25, 2023&lt;br /&gt;
* Feature Freeze: April 8, 2023 0:00 AoE (&#039;&#039;&#039;Last Day to Commit Features&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Release Management Team]]&lt;br /&gt;
* [[PostgreSQL 15 Open Items]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Open_Items]]&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_16_Open_Items&amp;diff=37815</id>
		<title>PostgreSQL 16 Open Items</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_16_Open_Items&amp;diff=37815"/>
		<updated>2023-05-09T16:48:02Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Open Issues ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Please place new open items at the end of the list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: If known, please list the Owner of the open item.&lt;br /&gt;
&lt;br /&gt;
* Is it OK that WL_SOCKET_ACCEPT is less fair on Windows than on Unix (and than the coding before 16) when there are multiple server sockets configured?&lt;br /&gt;
** {{messageLink|CA%2BhUKG%2BA2dk29hr5zRP3HVJQ-_PncNJM6HVQ7aaYLXLRBZU-xw%40mail.gmail.com|WL_SOCKET_ACCEPT fairness on Windows}} has a (blind) patch to fix that, but would need a Windows hacker to test&lt;br /&gt;
* Planner makes improper clause pushdown decisions due to outer-join-aware-Vars changes&lt;br /&gt;
** {{messageLink|0b819232-4b50-f245-1c7d-c8c61bf41827@postgrespro.ru|Clause accidentally pushed down}}&lt;br /&gt;
** {{messageLink|CAHewXNks3w_Vy9CWoVtHx1XSaeiFpsOzh-zy5eu0Khp1PtG1sA@mail.gmail.com|wrong results due to qual pushdown}}&lt;br /&gt;
** Owner: Tom Lane (2489d76c4)&lt;br /&gt;
* Switch to ICU for 17?&lt;br /&gt;
** {{messageLink|82c4c816-06f6-d3e3-ba02-fca4a5cef065@enterprisedb.com|I suggest waiting until next week to commit it and then see what happens}}&lt;br /&gt;
** [https://commitfest.postgresql.org/42/4169/ CF Entry]&lt;br /&gt;
* {{messageLink|e587e2ee-7de0-88a2-10f8-c7cf001bab8c%40postgrespro.ru|psql: Add role&#039;s membership options to the \du+ command}}&lt;br /&gt;
** [https://commitfest.postgresql.org/43/4116/ CF Entry]&lt;br /&gt;
** NOTE: This is not a committed feature for v16&lt;br /&gt;
* {{messageLink|874jp9f5jo.fsf@news-spur.riddles.org.uk|The rules for choosing default ICU locale seem pretty unfriendly}}&lt;br /&gt;
* {{messageLink|20230419172326.dhgyo4wrrhulovt6%40awork3.anarazel.de|pg_stat_io not tracking smgrwriteback() is confusing}}&lt;br /&gt;
* {{messageLink|d46f9265-ff3c-6743-2278-6772598233c2%40pgmasters.net|Possible regression setting GUCs on \connect}}&lt;br /&gt;
** Owner: Alexander Korotkov&lt;br /&gt;
** Discussion on reverting {{PgCommitURL|096dd80f3}}&lt;br /&gt;
** Original commit: {{PgCommitURL|096dd80f3}}&lt;br /&gt;
** Fixed at (bug only): {{PgCommitURL|db93e739ac61332126207b16f14da93f8ecac594}}&lt;br /&gt;
* {{messageLink|94ae9bca-5ebb-1e68-bb7b-4f32e89fefbe@gmail.com|Valgrind unhappy with LZ4F code in pg_dump}}&lt;br /&gt;
** Owner: Tomas Vondra&lt;br /&gt;
* {{messageLink|ZFhCyn4Gm2eu60rB@paquier.xyz|Table data compression is broken with pg_dump --compress lz4}}&lt;br /&gt;
** Owner: Tomas Vondra&lt;br /&gt;
* {{messageLink|20230314174521.74jl6ffqsee5mtug%40awork3.anarazel.de|DROP DATABASE is interruptible}}&lt;br /&gt;
** Additional discussion: {{messageLink|01020187577238cf-da8c0f4a-3ab9-445a-8c74-31ef51439f30-000000%40eu-west-1.amazonses.com|&amp;quot;PANIC: could not open critical system index 2662&amp;quot; - twice}}&lt;br /&gt;
** v16-specific fix&lt;br /&gt;
* {{messageLink|b32bed1b-0746-9b20-1472-4bdc9ca66d52@gmail.com|Performance regression due to SQLValueFunction removal}}&lt;br /&gt;
** Owner: Michael Paquier&lt;br /&gt;
** Original commit:  {{PgCommitURL|f193883fc9c}}&lt;br /&gt;
&lt;br /&gt;
== Decisions to Recheck Mid-Beta ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/268fd337-8bb7-92e6-0da2-416c022c11f3%40enterprisedb.com Reconsider a utility_query_id GUC to control if query jumbling of utilities can go through the past string-only mode and the new mode?]&lt;br /&gt;
** Potential owner: Michael Paquier&lt;br /&gt;
&lt;br /&gt;
== Older bugs affecting stable branches ==&lt;br /&gt;
&lt;br /&gt;
=== Live issues ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/CA%2BhUKGK3PGKwcKqzoosamn36YW-fsuTdOPPF1i_rtEO%3DnEYKSg%40mail.gmail.com RecoveryConflictInterrupt() is unsafe in a signal handler]&lt;br /&gt;
** This seems to [https://www.postgresql.org/message-id/447238.1651082925%40sss.pgh.pa.us explain buildfarm failures in 031_recovery_conflict.pl]&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAH2-WzkjjCoq5Y4LeeHJcjYJVxGm3M3SAWZ0%3D6J8K1FPSC9K0w%40mail.gmail.com REINDEX on a system catalog can leave index with two index tuples whose heap TIDs match]&lt;br /&gt;
** In other words, there is a rare case where the HOT invariant is violated. Same HOT chain is indexed twice due to confusion about which precise heap tuple should be indexed.&lt;br /&gt;
** Unclear what the user impact is.&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20201001021609.GC8476%40telsasoft.com memory leak with JIT inlining]&lt;br /&gt;
** [https://www.postgresql.org/message-id/flat/20210331040751.GU4431%40telsasoft.com#cc34872765add8e483e05009212d9d39 Another report of (same?) issue and reproducer] [https://www.postgresql.org/message-id/flat/9f73e655-14b8-feaf-bd66-c0f506224b9e%40stephans-server.de Another report] [https://www.postgresql.org/message-id/flat/16707-f5df308978a55bf8%40postgresql.org Another report] [https://www.postgresql.org/message-id/flat/CAPH-tTxLf44s3CvUUtQpkDr1D8Hxqc2NGDzGXS1ODsfiJ6WSqA%40mail.gmail.com Another report] [https://www.postgresql.org/message-id/flat/a53cacb0-8835-57d6-31e4-4c5ef196de1a@deepbluecap.com Another report]&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/dc9dd229-ed30-6c62-4c41-d733ffff776b%40xs4all.nl TOAST fetches could perhaps occur after the needed data has been removed]&lt;br /&gt;
** The symptom originally reported in the thread was fixed by {{PgCommitURL|9f4f0a0dad4c7422a97d94e4051c08ec6d181dd6}}, but nobody is very happy with the status quo in this area.  Do we need to do more now?&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/ZArVOMifjzE7f8W7%40paquier.xyz Requiring recovery.signal or standby.signal when recovering with a backup_label]&lt;br /&gt;
** This is a rather old behavior that affects all stable branches, still not something that should be backpatched as-is.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|cfcca574-6967-c5ab-7dc3-2c82b6723b99@mail.ru|pg_visibility&#039;s pg_check_visible() yields false positive when working in parallel with autovacuum}}&lt;br /&gt;
** {{messageLink|1649062270.289865713@f403.i.mail.ru|Thread with patch}} [https://commitfest.postgresql.org/43/3739/ CF Entry]&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|17862-1ab8f74b0f7b0611@postgresql.org|WindowAgg startup costs don&#039;t take into account partition bound.  Can lead to incorrect use of cheap startup plans}}&lt;br /&gt;
** {{messageLink|CAApHDvrB0S5BMv+0-wTTqWFE-BJ0noWqTnDu9QQfjZ2VSpLv_g@mail.gmail.com|Patch to fix and discussion}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|1516594.1681482708@sss.pgh.pa.us|We are not compatible with newly-released LLVM 16}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230314174521.74jl6ffqsee5mtug%40awork3.anarazel.de|DROP DATABASE is interruptible}}&lt;br /&gt;
** Additional discussion: {{messageLink|01020187577238cf-da8c0f4a-3ab9-445a-8c74-31ef51439f30-000000%40eu-west-1.amazonses.com|&amp;quot;PANIC: could not open critical system index 2662&amp;quot; - twice}}&lt;br /&gt;
&lt;br /&gt;
=== Fixed issues ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAEze2WgGiw%2BLZt%2BvHf8tWqB_6VxeLsMeoAuod0N%3Dij1q17n5pw%40mail.gmail.com Non-replayable WAL records through overflows and &amp;gt;MaxAllocSize lengths]&lt;br /&gt;
** In other words; we can write xlog records that we can&#039;t read (plus potentially actual WAL corruption); making the instance unrecoverable, and blocks any replication.&lt;br /&gt;
** Exploitation seems limited to WAL records of 2PC and logical replication, and extension-generated WAL.&lt;br /&gt;
** Affects all stable branches.&lt;br /&gt;
** Fixed at: {{PgCommitURL|8fcb32db98eda1ad2a0c0b40b1cbb5d9a7aa68f0}} and {{PgCommitURL|ffd1b6bb6f8a2ffc929699772610c6925364dbb3}} for HEAD.&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/flat/CAC+AXB26a4EmxM2suXxPpJaGrqAdxracd7hskLg-zxtPB50h7A@mail.gmail.com Fix fseek() detection of unseekable files on WIN32]&lt;br /&gt;
** Fixed at: {{PgCommitURL|a923e21631a29dc8b8781d7d02b5003d0df64ca3}} and {{PgCommitURL|765f5df726918bcdcfd16bcc5418e48663d1dd59}}, down to 14.&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CAAKRu_bETD%2BAri600h6fRjX2p8rJSeMAUp%3D_y88juqOZgouTSg%40mail.gmail.com|Can&#039;t disable autovacuum cost delay through storage parameter}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|bfac8f8bc4a44c67c9f35b5266676278e4ba1217}}, down to 11.&lt;br /&gt;
&lt;br /&gt;
== Non-bugs ==&lt;br /&gt;
&lt;br /&gt;
== Resolved Issues ==&lt;br /&gt;
&lt;br /&gt;
=== resolved before 16beta1 ===&lt;br /&gt;
&lt;br /&gt;
* Revert {{PgCommitURL|ec386948948}}, per {{messageLink|20230330105325.y6uvpalspynf2frt@alvherre.pgsql|Re: &amp;quot;variable not found in subplan target list&amp;quot;}}&lt;br /&gt;
** Reverted at {{PgCommitURL|5472743d9e8}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/CAEZATCWETioXs5kY8vT6BVguY41_wD962VDk%3Du_Nvd7S1UXzuQ%40mail.gmail.com ERROR:  ORDER/GROUP BY expression not found in targetlist]&lt;br /&gt;
** Fixed at: {{PgCommitURL|da5800d5fa636c6e10c9c98402d872c76aa1c8d0}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20230212233711.GA1316@telsasoft.com various elogs hit by sqlsmith (ExecRTCheckPerms() and many prunable partitions)]&lt;br /&gt;
** Fixed at: {{PgCommitURL|c7468c73f7b6e842a53c12eaee5578a76a8fa7a6}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20230228235834.GC30529@telsasoft.com pg_dump: zlib compression fails for empty objects (LOs)]&lt;br /&gt;
** Fixed at: {{PgCommitURL|00d9dcf5bebbb355152a60f0e2120cdf7f9e7ddd}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.postgresql.org/message-id/20230227044910.GO1653@telsasoft.com pg_dump: lz4 compression uses no persistent state and writes a block header for every row]&lt;br /&gt;
** Fixed at: {{PgCommitURL|0070b66fef21e909adb283f7faa7b1978836ad75}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|3590249.1680971629@sss.pgh.pa.us|Assertion failure with parallel full hash join}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|b37d051b0e59e4324e346655a27509507813db79}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|ZDDO6jaESKaBgej0@tamriel.snowman.net|De-revert &amp;quot;Add support for Kerberos credential delegation&amp;quot;}}&lt;br /&gt;
** Owner: Stephen Frost&lt;br /&gt;
** Original commit: {{PgCommitURL|3d4fa227bce4294ce1cc214b4a9d3b7caa3f0454}}&lt;br /&gt;
** Revert: ({{PgCommitURL|3d03b24c350ab060bb223623bdff38835bd7afd0}}&lt;br /&gt;
** De-Revert: {{PgCommitURL|6633cfb21691840c33816a6dacaca0b504efb895}}&lt;br /&gt;
** Resolved at: {{PgCommitURL|f7431bca8b0138bdbce7025871560d39119565a0}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|c39be3c5-c1a5-1e33-1024-16f527e251a4@enterprisedb.com|SSL tests break on non-existing system CA pool}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|0b5d1fb36adda612bd3d5d032463a6eeb0729237}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CAD21AoBS7o6Ljt_vfqPQPf67AhzKu3fR0iqk8B%3DvVYczMugKMQ%40mail.gmail.com|VacuumUpdateCosts() logging condition incorrect for some initial values of vacuum_cost_delay}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|a9781ae11ba2fdb44a3a72c9a7ebb727140b25c5}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|CA%2BhUKGJ-ZPJwKHVLbqye92-ZXeLoCHu5wJL6L6HhNP7FkJ%3DmeA%40mail.gmail.com|check_strxfrm_bug()}}&lt;br /&gt;
** Owner: Thomas Munro&lt;br /&gt;
** Fixed at: {{PgCommitURL|7d3d72b55edd1b7552a9a358991555994efab0e9}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|20230317230930.nhsgk3qfk7f4axls%40awork3.anarazel.de|Should we remove vacuum_defer_cleanup_age?}}&lt;br /&gt;
** Owner: Andres Freund&lt;br /&gt;
** Fixed at: {{PgCommitURL|1118cd37eb61e6a2428f457a8b2026a7bb3f801a}}&lt;br /&gt;
&lt;br /&gt;
* {{messageLink|2fefa454-5a70-2174-ddbf-4a0e41537139@gmail.com|Add two missing tests in 035_standby_logical_decoding.pl}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|376dc820531bafcbf105fff74c5b14c23d9950af}}&lt;br /&gt;
** Fixed at: {{PgCommitURL|a6e04b1d20c2e9cece9b64bb5b36ebfdc3a9031b}}&lt;br /&gt;
&lt;br /&gt;
== Won&#039;t Fix ==&lt;br /&gt;
&lt;br /&gt;
== Important Dates ==&lt;br /&gt;
&lt;br /&gt;
Current schedule:&lt;br /&gt;
&lt;br /&gt;
* Beta 2: TBD&lt;br /&gt;
* Beta 1: May 25, 2023&lt;br /&gt;
* Feature Freeze: April 8, 2023 0:00 AoE (&#039;&#039;&#039;Last Day to Commit Features&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Release Management Team]]&lt;br /&gt;
* [[PostgreSQL 15 Open Items]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Open_Items]]&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PgCon_2023_Developer_Meeting&amp;diff=37681</id>
		<title>PgCon 2023 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PgCon_2023_Developer_Meeting&amp;diff=37681"/>
		<updated>2023-03-21T21:38:03Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: /* RSVPs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A meeting of the interested PostgreSQL developers is being planned for Tuesday 30 May, 2023 at the University of Ottawa, prior to pgCon 2023. In order to keep the numbers manageable, this meeting is by &#039;&#039;&#039;invitation only&#039;&#039;&#039;.&lt;br /&gt;
Any questions regarding the invitations to this event should be directed to the team of individuals tasked with coming up with the list of people to invite:&lt;br /&gt;
&lt;br /&gt;
* Andres Freund&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Dave Page&lt;br /&gt;
&lt;br /&gt;
An Unconference will be held on Friday for in-depth discussion of technical topics.&lt;br /&gt;
&lt;br /&gt;
This is a PostgreSQL Community event.&lt;br /&gt;
&lt;br /&gt;
== Meeting Goals ==&lt;br /&gt;
&lt;br /&gt;
* Define the schedule for the upcoming releases&lt;br /&gt;
* Address any proposed timing, policy, or procedure issues&lt;br /&gt;
* Receive updates from project sub-teams on their activities and discuss any resulting issues or concerns.&lt;br /&gt;
* Address any proposed [http://en.wikipedia.org/wiki/Wicked_problem Wicked problems]&lt;br /&gt;
&lt;br /&gt;
== Time &amp;amp; Location ==&lt;br /&gt;
&lt;br /&gt;
The meeting will (probably) be:&lt;br /&gt;
&lt;br /&gt;
* 9:00AM to 12PM&lt;br /&gt;
* DMS 3105 - Desmarais Hall, 55 Laurier Avenue East&lt;br /&gt;
* University of Ottawa.&lt;br /&gt;
&lt;br /&gt;
Lunch will be served during the meeting.&lt;br /&gt;
&lt;br /&gt;
== COVID-19 ==&lt;br /&gt;
&lt;br /&gt;
The University of Ottawa&#039;s COVID-19 guidance can be found at https://www.uottawa.ca/en/covid-19. Wearing of masks at the Developer Meeting will be optional, however we do ask that people do not attend if they have COVID symptoms or have tested positive.&lt;br /&gt;
&lt;br /&gt;
== RSVPs ==&lt;br /&gt;
&lt;br /&gt;
The following people have RSVPed to the meeting (in alphabetical order, by surname). Note that we can accommodate a &#039;&#039;&#039;maximum of 30&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
# Joe Conway&lt;br /&gt;
# Jeff Davis&lt;br /&gt;
# Stephen Frost&lt;br /&gt;
# Jonathan Katz&lt;br /&gt;
# Alexander Korotkov&lt;br /&gt;
# Tom Lane&lt;br /&gt;
# Dave Page&lt;br /&gt;
# Andres Freund&lt;br /&gt;
&lt;br /&gt;
The following people will not be in Ottawa, and do not plan to attend:&lt;br /&gt;
&lt;br /&gt;
== Agenda Items ==&lt;br /&gt;
&lt;br /&gt;
* 16.0 release and commitfest schedule (Dave)&lt;br /&gt;
* &#039;&#039;Please add suggestions for agenda items here. (with your name)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Agenda==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Time&lt;br /&gt;
!Item&lt;br /&gt;
!Presenter&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|09:00 - 09:10&lt;br /&gt;
|Welcome and introductions&lt;br /&gt;
|Dave Page&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
|09:10 - 09:20&lt;br /&gt;
|Release and commitfest schedules&lt;br /&gt;
|Dave Page&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
|??:?? - ??:??&lt;br /&gt;
|TBD&lt;br /&gt;
|TBD&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|10:30 - 11:00&lt;br /&gt;
|Coffee break&lt;br /&gt;
|All&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
|??:?? - ??:??&lt;br /&gt;
|TBD&lt;br /&gt;
|TBD&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
|11:50 - 12:00&lt;br /&gt;
|Any other business&lt;br /&gt;
|Dave Page&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|12:00&lt;br /&gt;
|Lunch&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: This timetable is a rough guide only. Items will start as soon as the previous discussion is complete (breaks will not move materially however). Any remaining time before lunch may be used for Commitfest item triage or other activities.&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer Meeting]]&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37274</id>
		<title>Meson</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37274"/>
		<updated>2022-10-05T22:07:59Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: /* Installing Meson */ - Add RHEL n&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quickstart ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ translation of configure, make, etc commands &lt;br /&gt;
!description&lt;br /&gt;
!old command&lt;br /&gt;
!new command&lt;br /&gt;
!comment&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree&lt;br /&gt;
|| ./configure [&amp;lt;options&amp;gt;]&lt;br /&gt;
|| meson setup [&amp;lt;options&amp;gt;] [&amp;lt;build dir&amp;gt;] &amp;lt;source-dir&amp;gt; &lt;br /&gt;
|| meson only supports building out of tree&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree for visual studio&lt;br /&gt;
|| perl src/tools/msvc/mkvcbuild.pl&lt;br /&gt;
|| meson setup --backend vs [&amp;lt;options&amp;gt;] [&amp;lt;build dir&amp;gt;] &amp;lt;source-dir&amp;gt;&lt;br /&gt;
|| configures build tree for one build type (debug or release or ...)&lt;br /&gt;
|-&lt;br /&gt;
|| show configure options&lt;br /&gt;
|| ./configure --help&lt;br /&gt;
|| meson configure&lt;br /&gt;
|| shows options built into meson and PostgreSQL specific options&lt;br /&gt;
|-&lt;br /&gt;
|| set configure options&lt;br /&gt;
|| ./configure --prefix=DIR, --$somedir=DIR, --with-$option, --enable-$feature&lt;br /&gt;
|| meson setup|configure -D$option=$value&lt;br /&gt;
|| options can be set when setting up build tree (setup) and in existing build tree (configure)&lt;br /&gt;
|- &lt;br /&gt;
|| enable cassert&lt;br /&gt;
|| --enable-cassert&lt;br /&gt;
|| -Dcassert=true&lt;br /&gt;
|-&lt;br /&gt;
|| enable debug symbols&lt;br /&gt;
|| ./configure --enable-debug&lt;br /&gt;
|| meson configure|setup -Ddebug=true&lt;br /&gt;
|-&lt;br /&gt;
|| specify compiler&lt;br /&gt;
|| CC=compiler ./configure&lt;br /&gt;
|| CC=compiler meson setup &lt;br /&gt;
|| CC is only checked during meson setup, not with meson configure&lt;br /&gt;
|-&lt;br /&gt;
|| set CFLAGS&lt;br /&gt;
|| CFLAGS=options ./configure&lt;br /&gt;
|| meson configure|setup -Dc_args=options&lt;br /&gt;
|| CFLAGS is also checked, but only for meson setup&lt;br /&gt;
|-&lt;br /&gt;
|| build&lt;br /&gt;
|| make -s&lt;br /&gt;
|| ninja&lt;br /&gt;
|| ninja uses parallelism by default, launch from the root of the build tree.&lt;br /&gt;
|-&lt;br /&gt;
|| build, showing compiler commands&lt;br /&gt;
|| make&lt;br /&gt;
|| ninja -v&lt;br /&gt;
|| ninja uses parallelism by default, launch from the root of the build tree.&lt;br /&gt;
|-&lt;br /&gt;
|| install all the binaries and libraries&lt;br /&gt;
|| make install&lt;br /&gt;
|| ninja install&lt;br /&gt;
|| use meson install --quiet for a less verbose experience&lt;br /&gt;
|-&lt;br /&gt;
|| run all tests&lt;br /&gt;
|| make check-world&lt;br /&gt;
|| meson test&lt;br /&gt;
|| runs all test, using parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| build documentation&lt;br /&gt;
|| cd doc/ &amp;amp;&amp;amp; make html &amp;amp;&amp;amp; make man&lt;br /&gt;
|| ninja docs&lt;br /&gt;
|| Builds html documentation and man pages &lt;br /&gt;
|-&lt;br /&gt;
|| run main regression tests&lt;br /&gt;
|| make check&lt;br /&gt;
|| meson test --suite setup --suite main&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
|| list tests&lt;br /&gt;
||&lt;br /&gt;
|| meson test --list&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Installing Meson ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Debian / Ubuntu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update &amp;amp;&amp;amp; apt-get install -y meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 8:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install dnf-plugins-core&lt;br /&gt;
dnf config-manager --set-enabled powertools&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 9 (tested on Rocky Linux 9):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install dnf-plugins-core&lt;br /&gt;
dnf config-manager --set-enabled crb&lt;br /&gt;
dnf -y install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== macOS ===&lt;br /&gt;
&lt;br /&gt;
With MacPorts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo port install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments to meson setup/configure to find MacPorts libraries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/opt/local/lib/pkgconfig -Dextra_lib_dirs=/opt/local/lib/ -Dextra_include_dirs=/opt/local/include $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With Homebrew:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
brew install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments to meson setup/configure to find Homebrew libraries:&lt;br /&gt;
&lt;br /&gt;
On arm64:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/opt/homebrew/lib/pkgconfig -Dextra_include_dirs=/opt/homebrew/include -Dextra_lib_dirs=/opt/homebrew/lib $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On x86-64:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/usr/local/lib/pkgconfig -Dextra_include_dirs=/usr/local/include -Dextra_lib_dirs=/usr/local/lib $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Assuming python is installed, the easiest way to get meson and ninja is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install meson ninja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Why and What ==&lt;br /&gt;
&lt;br /&gt;
Autoconf is showing its age, fewer and fewer contributors know how to wrangle&lt;br /&gt;
it. Recursive make has a lot of hard to resolve dependency issues and slow&lt;br /&gt;
incremental rebuilds. Our home-grown MSVC buildsystem is hard to maintain for&lt;br /&gt;
developers not using windows and runs tests serially. While these and other&lt;br /&gt;
issues could individually be addressed with incremental improvements, together&lt;br /&gt;
they seem best addressed by moving to a more modern buildsystem.&lt;br /&gt;
&lt;br /&gt;
After evaluating different buildsystem choices, we chose to use meson, to a&lt;br /&gt;
good degree based on the adoption by other open source projects.&lt;br /&gt;
&lt;br /&gt;
We decided that it&#039;s more realistic to commit a relatively early version of&lt;br /&gt;
the new buildsystem and mature it in tree.&lt;br /&gt;
&lt;br /&gt;
The plan is to remove the msvc specific buildsystem in src/tools/msvc soon&lt;br /&gt;
after reaching feature parity. However, we&#039;re not planning to remove the&lt;br /&gt;
autoconf/make buildsystem in the near future. Likely we&#039;re going to keep at&lt;br /&gt;
least the parts required for PGXS to keep working around until all supported&lt;br /&gt;
versions build with meson.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Meson documentation ==&lt;br /&gt;
&lt;br /&gt;
* [https://mesonbuild.com/Commands.html meson commandline commands]&lt;br /&gt;
* [https://mesonbuild.com/Syntax.html meson syntax]&lt;br /&gt;
* [https://mesonbuild.com/Reference-manual_functions.html meson functions]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Development tree, other resources ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/anarazel/postgres/tree/meson&lt;br /&gt;
* https://wiki.postgresql.org/wiki/PgCon_2022_Developer_Unconference#Meson_new_build_system_proposal&lt;br /&gt;
&lt;br /&gt;
== Visualizing builds ==&lt;br /&gt;
&lt;br /&gt;
When building with ninja, the generated .ninja_log can be uploaded to [https://ui.perfetto.dev/ ui.perfetto.dev], which is very helpful to visualize builds.&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37241</id>
		<title>Meson</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37241"/>
		<updated>2022-09-26T19:02:38Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: Blind adjustment for macOS homebrew on 86_64, reported by John Naylor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quickstart ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ translation of configure, make, etc commands &lt;br /&gt;
!description&lt;br /&gt;
!old command&lt;br /&gt;
!new command&lt;br /&gt;
!comment&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree&lt;br /&gt;
|| ./configure [&amp;lt;options&amp;gt;]&lt;br /&gt;
|| meson setup [&amp;lt;options&amp;gt;] [&amp;lt;build dir&amp;gt;] &amp;lt;source-dir&amp;gt; &lt;br /&gt;
|| meson only supports building out of tree&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree for visual studio&lt;br /&gt;
|| perl src/tools/msvc/mkvcbuild.pl&lt;br /&gt;
|| meson setup --backend vs [&amp;lt;options&amp;gt;] [&amp;lt;build dir&amp;gt;] &amp;lt;source-dir&amp;gt;&lt;br /&gt;
|| configures build tree for one build type (debug or release or ...)&lt;br /&gt;
|-&lt;br /&gt;
|| show configure options&lt;br /&gt;
|| ./configure --help&lt;br /&gt;
|| meson configure&lt;br /&gt;
|| shows options built into meson and PostgreSQL specific options&lt;br /&gt;
|-&lt;br /&gt;
|| set configure options&lt;br /&gt;
|| ./configure --prefix=DIR, --$somedir=DIR, --with-$option, --enable-$feature&lt;br /&gt;
|| meson setup|configure -D$option=$value&lt;br /&gt;
|| options can be set when setting up build tree (setup) and in existing build tree (configure)&lt;br /&gt;
|- &lt;br /&gt;
|| enable cassert&lt;br /&gt;
|| --enable-cassert&lt;br /&gt;
|| -Dcassert=true&lt;br /&gt;
|-&lt;br /&gt;
|| enable debug symbols&lt;br /&gt;
|| ./configure --enable-debug&lt;br /&gt;
|| meson configure|setup -Ddebug=true&lt;br /&gt;
|-&lt;br /&gt;
|| specify compiler&lt;br /&gt;
|| CC=compiler ./configure&lt;br /&gt;
|| CC=compiler meson setup &lt;br /&gt;
|| CC is only checked during meson setup, not with meson configure&lt;br /&gt;
|-&lt;br /&gt;
|| set CFLAGS&lt;br /&gt;
|| CFLAGS=options ./configure&lt;br /&gt;
|| meson configure|setup -Dc_args=options&lt;br /&gt;
|| CFLAGS is also checked, but only for meson setup&lt;br /&gt;
|-&lt;br /&gt;
|| build&lt;br /&gt;
|| make -s&lt;br /&gt;
|| ninja&lt;br /&gt;
|| ninja uses parallelism by default, launch from the root of the build tree.&lt;br /&gt;
|-&lt;br /&gt;
|| build, showing compiler commands&lt;br /&gt;
|| make&lt;br /&gt;
|| ninja -v&lt;br /&gt;
|| ninja uses parallelism by default, launch from the root of the build tree.&lt;br /&gt;
|-&lt;br /&gt;
|| install all the binaries and libraries&lt;br /&gt;
|| make install&lt;br /&gt;
|| ninja install&lt;br /&gt;
|| use meson install --quiet for a less verbose experience&lt;br /&gt;
|-&lt;br /&gt;
|| run all tests&lt;br /&gt;
|| make check-world&lt;br /&gt;
|| meson test&lt;br /&gt;
|| runs all test, using parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| build documentation&lt;br /&gt;
|| cd doc/ &amp;amp;&amp;amp; make html &amp;amp;&amp;amp; make man&lt;br /&gt;
|| ninja docs&lt;br /&gt;
|| Builds html documentation and man pages &lt;br /&gt;
|-&lt;br /&gt;
|| run main regression tests&lt;br /&gt;
|| make check&lt;br /&gt;
|| meson test --suite setup --suite main&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
|| list tests&lt;br /&gt;
||&lt;br /&gt;
|| meson test --list&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Installing Meson ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Debian / Ubuntu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update &amp;amp;&amp;amp; apt-get install -y meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 8:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install dnf-plugins-core&lt;br /&gt;
dnf config-manager --set-enabled powertools&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 9:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
???&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== macOS ===&lt;br /&gt;
&lt;br /&gt;
With MacPorts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo port install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments to meson setup/configure to find MacPorts libraries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/opt/local/lib/pkgconfig -Dextra_lib_dirs=/opt/local/lib/ -Dextra_include_dirs=/opt/local/include $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With Homebrew:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
brew install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments to meson setup/configure to find Homebrew libraries:&lt;br /&gt;
&lt;br /&gt;
On arm64:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/opt/homebrew/lib/pkgconfig -Dextra_include_dirs=/opt/homebrew/include -Dextra_lib_dirs=/opt/homebrew/lib $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On x86-64:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/usr/local/lib/pkgconfig -Dextra_include_dirs=/usr/local/include -Dextra_lib_dirs=/usr/local/lib $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Assuming python is installed, the easiest way to get meson and ninja is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install meson ninja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why and What ==&lt;br /&gt;
&lt;br /&gt;
Autoconf is showing its age, fewer and fewer contributors know how to wrangle&lt;br /&gt;
it. Recursive make has a lot of hard to resolve dependency issues and slow&lt;br /&gt;
incremental rebuilds. Our home-grown MSVC buildsystem is hard to maintain for&lt;br /&gt;
developers not using windows and runs tests serially. While these and other&lt;br /&gt;
issues could individually be addressed with incremental improvements, together&lt;br /&gt;
they seem best addressed by moving to a more modern buildsystem.&lt;br /&gt;
&lt;br /&gt;
After evaluating different buildsystem choices, we chose to use meson, to a&lt;br /&gt;
good degree based on the adoption by other open source projects.&lt;br /&gt;
&lt;br /&gt;
We decided that it&#039;s more realistic to commit a relatively early version of&lt;br /&gt;
the new buildsystem and mature it in tree.&lt;br /&gt;
&lt;br /&gt;
The plan is to remove the msvc specific buildsystem in src/tools/msvc soon&lt;br /&gt;
after reaching feature parity. However, we&#039;re not planning to remove the&lt;br /&gt;
autoconf/make buildsystem in the near future. Likely we&#039;re going to keep at&lt;br /&gt;
least the parts required for PGXS to keep working around until all supported&lt;br /&gt;
versions build with meson.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Meson documentation ==&lt;br /&gt;
&lt;br /&gt;
* [https://mesonbuild.com/Commands.html meson commandline commands]&lt;br /&gt;
* [https://mesonbuild.com/Syntax.html meson syntax]&lt;br /&gt;
* [https://mesonbuild.com/Reference-manual_functions.html meson functions]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Development tree, other resources ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/anarazel/postgres/tree/meson&lt;br /&gt;
* https://wiki.postgresql.org/wiki/PgCon_2022_Developer_Unconference#Meson_new_build_system_proposal&lt;br /&gt;
&lt;br /&gt;
== Visualizing builds ==&lt;br /&gt;
&lt;br /&gt;
When building with ninja, the generated .ninja_log can be uploaded to [https://ui.perfetto.dev/ ui.perfetto.dev], which is very helpful to visualize builds.&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37240</id>
		<title>Meson</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37240"/>
		<updated>2022-09-26T18:59:02Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: mention &amp;quot;meson install --quiet&amp;quot; instead of copying comment about parallelism&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quickstart ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ translation of configure, make, etc commands &lt;br /&gt;
!description&lt;br /&gt;
!old command&lt;br /&gt;
!new command&lt;br /&gt;
!comment&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree&lt;br /&gt;
|| ./configure [&amp;lt;options&amp;gt;]&lt;br /&gt;
|| meson setup [&amp;lt;options&amp;gt;] [&amp;lt;build dir&amp;gt;] &amp;lt;source-dir&amp;gt; &lt;br /&gt;
|| meson only supports building out of tree&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree for visual studio&lt;br /&gt;
|| perl src/tools/msvc/mkvcbuild.pl&lt;br /&gt;
|| meson setup --backend vs [&amp;lt;options&amp;gt;] [&amp;lt;build dir&amp;gt;] &amp;lt;source-dir&amp;gt;&lt;br /&gt;
|| configures build tree for one build type (debug or release or ...)&lt;br /&gt;
|-&lt;br /&gt;
|| show configure options&lt;br /&gt;
|| ./configure --help&lt;br /&gt;
|| meson configure&lt;br /&gt;
|| shows options built into meson and PostgreSQL specific options&lt;br /&gt;
|-&lt;br /&gt;
|| set configure options&lt;br /&gt;
|| ./configure --prefix=DIR, --$somedir=DIR, --with-$option, --enable-$feature&lt;br /&gt;
|| meson setup|configure -D$option=$value&lt;br /&gt;
|| options can be set when setting up build tree (setup) and in existing build tree (configure)&lt;br /&gt;
|- &lt;br /&gt;
|| enable cassert&lt;br /&gt;
|| --enable-cassert&lt;br /&gt;
|| -Dcassert=true&lt;br /&gt;
|-&lt;br /&gt;
|| enable debug symbols&lt;br /&gt;
|| ./configure --enable-debug&lt;br /&gt;
|| meson configure|setup -Ddebug=true&lt;br /&gt;
|-&lt;br /&gt;
|| specify compiler&lt;br /&gt;
|| CC=compiler ./configure&lt;br /&gt;
|| CC=compiler meson setup &lt;br /&gt;
|| CC is only checked during meson setup, not with meson configure&lt;br /&gt;
|-&lt;br /&gt;
|| set CFLAGS&lt;br /&gt;
|| CFLAGS=options ./configure&lt;br /&gt;
|| meson configure|setup -Dc_args=options&lt;br /&gt;
|| CFLAGS is also checked, but only for meson setup&lt;br /&gt;
|-&lt;br /&gt;
|| build&lt;br /&gt;
|| make -s&lt;br /&gt;
|| ninja&lt;br /&gt;
|| ninja uses parallelism by default, launch from the root of the build tree.&lt;br /&gt;
|-&lt;br /&gt;
|| build, showing compiler commands&lt;br /&gt;
|| make&lt;br /&gt;
|| ninja -v&lt;br /&gt;
|| ninja uses parallelism by default, launch from the root of the build tree.&lt;br /&gt;
|-&lt;br /&gt;
|| install all the binaries and libraries&lt;br /&gt;
|| make install&lt;br /&gt;
|| ninja install&lt;br /&gt;
|| use meson install --quiet for a less verbose experience&lt;br /&gt;
|-&lt;br /&gt;
|| run all tests&lt;br /&gt;
|| make check-world&lt;br /&gt;
|| meson test&lt;br /&gt;
|| runs all test, using parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| build documentation&lt;br /&gt;
|| cd doc/ &amp;amp;&amp;amp; make html &amp;amp;&amp;amp; make man&lt;br /&gt;
|| ninja docs&lt;br /&gt;
|| Builds html documentation and man pages &lt;br /&gt;
|-&lt;br /&gt;
|| run main regression tests&lt;br /&gt;
|| make check&lt;br /&gt;
|| meson test --suite setup --suite main&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
|| list tests&lt;br /&gt;
||&lt;br /&gt;
|| meson test --list&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Installing Meson ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Debian / Ubuntu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update &amp;amp;&amp;amp; apt-get install -y meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 8:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install dnf-plugins-core&lt;br /&gt;
dnf config-manager --set-enabled powertools&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 9:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
???&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MacOS ===&lt;br /&gt;
&lt;br /&gt;
With MacPorts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo port install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments to meson setup/configure to find MacPorts libraries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/opt/local/lib/pkgconfig -Dextra_lib_dirs=/opt/local/lib/ -Dextra_include_dirs=/opt/local/include $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With Homebrew:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
brew install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments to meson setup/configure to find Homebrew libraries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/opt/homebrew/lib/pkgconfig/ -Dextra_include_dirs=/opt/homebrew/include/ -Dextra_lib_dirs=/opt/homebrew/lib $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Assuming python is installed, the easiest way to get meson and ninja is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install meson ninja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why and What ==&lt;br /&gt;
&lt;br /&gt;
Autoconf is showing its age, fewer and fewer contributors know how to wrangle&lt;br /&gt;
it. Recursive make has a lot of hard to resolve dependency issues and slow&lt;br /&gt;
incremental rebuilds. Our home-grown MSVC buildsystem is hard to maintain for&lt;br /&gt;
developers not using windows and runs tests serially. While these and other&lt;br /&gt;
issues could individually be addressed with incremental improvements, together&lt;br /&gt;
they seem best addressed by moving to a more modern buildsystem.&lt;br /&gt;
&lt;br /&gt;
After evaluating different buildsystem choices, we chose to use meson, to a&lt;br /&gt;
good degree based on the adoption by other open source projects.&lt;br /&gt;
&lt;br /&gt;
We decided that it&#039;s more realistic to commit a relatively early version of&lt;br /&gt;
the new buildsystem and mature it in tree.&lt;br /&gt;
&lt;br /&gt;
The plan is to remove the msvc specific buildsystem in src/tools/msvc soon&lt;br /&gt;
after reaching feature parity. However, we&#039;re not planning to remove the&lt;br /&gt;
autoconf/make buildsystem in the near future. Likely we&#039;re going to keep at&lt;br /&gt;
least the parts required for PGXS to keep working around until all supported&lt;br /&gt;
versions build with meson.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Meson documentation ==&lt;br /&gt;
&lt;br /&gt;
* [https://mesonbuild.com/Commands.html meson commandline commands]&lt;br /&gt;
* [https://mesonbuild.com/Syntax.html meson syntax]&lt;br /&gt;
* [https://mesonbuild.com/Reference-manual_functions.html meson functions]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Development tree, other resources ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/anarazel/postgres/tree/meson&lt;br /&gt;
* https://wiki.postgresql.org/wiki/PgCon_2022_Developer_Unconference#Meson_new_build_system_proposal&lt;br /&gt;
&lt;br /&gt;
== Visualizing builds ==&lt;br /&gt;
&lt;br /&gt;
When building with ninja, the generated .ninja_log can be uploaded to [https://ui.perfetto.dev/ ui.perfetto.dev], which is very helpful to visualize builds.&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37239</id>
		<title>Meson</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37239"/>
		<updated>2022-09-26T18:56:50Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: Remove unnecessary use of -v for ninja install, noticed by John Naylor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quickstart ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ translation of configure, make, etc commands &lt;br /&gt;
!description&lt;br /&gt;
!old command&lt;br /&gt;
!new command&lt;br /&gt;
!comment&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree&lt;br /&gt;
|| ./configure [&amp;lt;options&amp;gt;]&lt;br /&gt;
|| meson setup [&amp;lt;options&amp;gt;] [&amp;lt;build dir&amp;gt;] &amp;lt;source-dir&amp;gt; &lt;br /&gt;
|| meson only supports building out of tree&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree for visual studio&lt;br /&gt;
|| perl src/tools/msvc/mkvcbuild.pl&lt;br /&gt;
|| meson setup --backend vs [&amp;lt;options&amp;gt;] [&amp;lt;build dir&amp;gt;] &amp;lt;source-dir&amp;gt;&lt;br /&gt;
|| configures build tree for one build type (debug or release or ...)&lt;br /&gt;
|-&lt;br /&gt;
|| show configure options&lt;br /&gt;
|| ./configure --help&lt;br /&gt;
|| meson configure&lt;br /&gt;
|| shows options built into meson and PostgreSQL specific options&lt;br /&gt;
|-&lt;br /&gt;
|| set configure options&lt;br /&gt;
|| ./configure --prefix=DIR, --$somedir=DIR, --with-$option, --enable-$feature&lt;br /&gt;
|| meson setup|configure -D$option=$value&lt;br /&gt;
|| options can be set when setting up build tree (setup) and in existing build tree (configure)&lt;br /&gt;
|- &lt;br /&gt;
|| enable cassert&lt;br /&gt;
|| --enable-cassert&lt;br /&gt;
|| -Dcassert=true&lt;br /&gt;
|-&lt;br /&gt;
|| enable debug symbols&lt;br /&gt;
|| ./configure --enable-debug&lt;br /&gt;
|| meson configure|setup -Ddebug=true&lt;br /&gt;
|-&lt;br /&gt;
|| specify compiler&lt;br /&gt;
|| CC=compiler ./configure&lt;br /&gt;
|| CC=compiler meson setup &lt;br /&gt;
|| CC is only checked during meson setup, not with meson configure&lt;br /&gt;
|-&lt;br /&gt;
|| set CFLAGS&lt;br /&gt;
|| CFLAGS=options ./configure&lt;br /&gt;
|| meson configure|setup -Dc_args=options&lt;br /&gt;
|| CFLAGS is also checked, but only for meson setup&lt;br /&gt;
|-&lt;br /&gt;
|| build&lt;br /&gt;
|| make -s&lt;br /&gt;
|| ninja&lt;br /&gt;
|| ninja uses parallelism by default, launch from the root of the build tree.&lt;br /&gt;
|-&lt;br /&gt;
|| build, showing compiler commands&lt;br /&gt;
|| make&lt;br /&gt;
|| ninja -v&lt;br /&gt;
|| ninja uses parallelism by default, launch from the root of the build tree.&lt;br /&gt;
|-&lt;br /&gt;
|| install all the binaries and libraries&lt;br /&gt;
|| make install&lt;br /&gt;
|| ninja install&lt;br /&gt;
|| ninja uses parallelism by default, launch from the root of the build tree.&lt;br /&gt;
|-&lt;br /&gt;
|| run all tests&lt;br /&gt;
|| make check-world&lt;br /&gt;
|| meson test&lt;br /&gt;
|| runs all test, using parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| build documentation&lt;br /&gt;
|| cd doc/ &amp;amp;&amp;amp; make html &amp;amp;&amp;amp; make man&lt;br /&gt;
|| ninja docs&lt;br /&gt;
|| Builds html documentation and man pages &lt;br /&gt;
|-&lt;br /&gt;
|| run main regression tests&lt;br /&gt;
|| make check&lt;br /&gt;
|| meson test --suite setup --suite main&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
|| list tests&lt;br /&gt;
||&lt;br /&gt;
|| meson test --list&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Installing Meson ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Debian / Ubuntu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update &amp;amp;&amp;amp; apt-get install -y meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 8:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install dnf-plugins-core&lt;br /&gt;
dnf config-manager --set-enabled powertools&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 9:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
???&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MacOS ===&lt;br /&gt;
&lt;br /&gt;
With MacPorts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo port install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments to meson setup/configure to find MacPorts libraries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/opt/local/lib/pkgconfig -Dextra_lib_dirs=/opt/local/lib/ -Dextra_include_dirs=/opt/local/include $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With Homebrew:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
brew install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments to meson setup/configure to find Homebrew libraries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/opt/homebrew/lib/pkgconfig/ -Dextra_include_dirs=/opt/homebrew/include/ -Dextra_lib_dirs=/opt/homebrew/lib $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Assuming python is installed, the easiest way to get meson and ninja is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install meson ninja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why and What ==&lt;br /&gt;
&lt;br /&gt;
Autoconf is showing its age, fewer and fewer contributors know how to wrangle&lt;br /&gt;
it. Recursive make has a lot of hard to resolve dependency issues and slow&lt;br /&gt;
incremental rebuilds. Our home-grown MSVC buildsystem is hard to maintain for&lt;br /&gt;
developers not using windows and runs tests serially. While these and other&lt;br /&gt;
issues could individually be addressed with incremental improvements, together&lt;br /&gt;
they seem best addressed by moving to a more modern buildsystem.&lt;br /&gt;
&lt;br /&gt;
After evaluating different buildsystem choices, we chose to use meson, to a&lt;br /&gt;
good degree based on the adoption by other open source projects.&lt;br /&gt;
&lt;br /&gt;
We decided that it&#039;s more realistic to commit a relatively early version of&lt;br /&gt;
the new buildsystem and mature it in tree.&lt;br /&gt;
&lt;br /&gt;
The plan is to remove the msvc specific buildsystem in src/tools/msvc soon&lt;br /&gt;
after reaching feature parity. However, we&#039;re not planning to remove the&lt;br /&gt;
autoconf/make buildsystem in the near future. Likely we&#039;re going to keep at&lt;br /&gt;
least the parts required for PGXS to keep working around until all supported&lt;br /&gt;
versions build with meson.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Meson documentation ==&lt;br /&gt;
&lt;br /&gt;
* [https://mesonbuild.com/Commands.html meson commandline commands]&lt;br /&gt;
* [https://mesonbuild.com/Syntax.html meson syntax]&lt;br /&gt;
* [https://mesonbuild.com/Reference-manual_functions.html meson functions]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Development tree, other resources ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/anarazel/postgres/tree/meson&lt;br /&gt;
* https://wiki.postgresql.org/wiki/PgCon_2022_Developer_Unconference#Meson_new_build_system_proposal&lt;br /&gt;
&lt;br /&gt;
== Visualizing builds ==&lt;br /&gt;
&lt;br /&gt;
When building with ninja, the generated .ninja_log can be uploaded to [https://ui.perfetto.dev/ ui.perfetto.dev], which is very helpful to visualize builds.&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37233</id>
		<title>Meson</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37233"/>
		<updated>2022-09-22T06:15:21Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quickstart ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ translation of configure, make, etc commands &lt;br /&gt;
!description&lt;br /&gt;
!old command&lt;br /&gt;
!new command&lt;br /&gt;
!comment&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree&lt;br /&gt;
|| ./configure [&amp;lt;options&amp;gt;]&lt;br /&gt;
|| meson setup [&amp;lt;options&amp;gt;] [&amp;lt;build dir&amp;gt;] &amp;lt;source-dir&amp;gt; &lt;br /&gt;
|| meson only supports building out of tree&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree for visual studio&lt;br /&gt;
|| perl src/tools/msvc/mkvcbuild.pl&lt;br /&gt;
|| meson setup --backend vs [&amp;lt;options&amp;gt;] [&amp;lt;build dir&amp;gt;] &amp;lt;source-dir&amp;gt;&lt;br /&gt;
|| configures build tree for one build type (debug or release or ...)&lt;br /&gt;
|-&lt;br /&gt;
|| show configure options&lt;br /&gt;
|| ./configure --help&lt;br /&gt;
|| meson configure&lt;br /&gt;
|| shows options built into meson and PostgreSQL specific options&lt;br /&gt;
|-&lt;br /&gt;
|| set configure options&lt;br /&gt;
|| ./configure --prefix=DIR, --$somedir=DIR, --with-$option, --enable-$feature&lt;br /&gt;
|| meson setup|configure -D$option=$value&lt;br /&gt;
|| options can be set when setting up build tree (setup) and in existing build tree (configure)&lt;br /&gt;
|- &lt;br /&gt;
|| enable cassert&lt;br /&gt;
|| --enable-cassert&lt;br /&gt;
|| -Dcassert=true&lt;br /&gt;
|-&lt;br /&gt;
|| enable debug symbols&lt;br /&gt;
|| ./configure --enable-debug&lt;br /&gt;
|| meson configure|setup -Ddebug=true&lt;br /&gt;
|-&lt;br /&gt;
|| specify compiler&lt;br /&gt;
|| CC=compiler ./configure&lt;br /&gt;
|| CC=compiler meson setup &lt;br /&gt;
|| CC is only checked during meson setup, not with meson configure&lt;br /&gt;
|-&lt;br /&gt;
|| set CFLAGS&lt;br /&gt;
|| CFLAGS=options ./configure&lt;br /&gt;
|| meson configure|setup -Dc_args=options&lt;br /&gt;
|| CFLAGS is also checked, but only for meson setup&lt;br /&gt;
|-&lt;br /&gt;
|| build&lt;br /&gt;
|| make -s&lt;br /&gt;
|| ninja&lt;br /&gt;
|| ninja uses parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| build, showing compiler commands&lt;br /&gt;
|| make&lt;br /&gt;
|| ninja -v&lt;br /&gt;
|| ninja uses parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| run all tests&lt;br /&gt;
|| make check-world&lt;br /&gt;
|| meson test&lt;br /&gt;
|| runs all test, using parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| run main regression tests&lt;br /&gt;
|| make check&lt;br /&gt;
|| meson test --suite setup --suite main&lt;br /&gt;
|-&lt;br /&gt;
|| list tests&lt;br /&gt;
|&lt;br /&gt;
|| meson test --list&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Installing Meson ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Debian / Ubuntu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update &amp;amp;&amp;amp; apt-get install -y meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 8:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install dnf-plugins-core&lt;br /&gt;
dnf config-manager --set-enabled powertools&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 9:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
???&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MacOS ===&lt;br /&gt;
&lt;br /&gt;
With MacPorts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo port install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments to meson setup/configure to find MacPorts libraries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/opt/local/lib/pkgconfig -Dextra_lib_dirs=/opt/local/lib/ -Dextra_include_dirs=/opt/local/include $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With Homebrew:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
brew install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments to meson setup/configure to find Homebrew libraries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/opt/homebrew/lib/pkgconfig/ -Dextra_include_dirs=/opt/homebrew/include/ -Dextra_lib_dirs=/opt/homebrew/lib $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Assuming python is installed, the easiest way to get meson and ninja is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install meson ninja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why and What ==&lt;br /&gt;
&lt;br /&gt;
Autoconf is showing its age, fewer and fewer contributors know how to wrangle&lt;br /&gt;
it. Recursive make has a lot of hard to resolve dependency issues and slow&lt;br /&gt;
incremental rebuilds. Our home-grown MSVC buildsystem is hard to maintain for&lt;br /&gt;
developers not using windows and runs tests serially. While these and other&lt;br /&gt;
issues could individually be addressed with incremental improvements, together&lt;br /&gt;
they seem best addressed by moving to a more modern buildsystem.&lt;br /&gt;
&lt;br /&gt;
After evaluating different buildsystem choices, we chose to use meson, to a&lt;br /&gt;
good degree based on the adoption by other open source projects.&lt;br /&gt;
&lt;br /&gt;
We decided that it&#039;s more realistic to commit a relatively early version of&lt;br /&gt;
the new buildsystem and mature it in tree.&lt;br /&gt;
&lt;br /&gt;
The plan is to remove the msvc specific buildsystem in src/tools/msvc soon&lt;br /&gt;
after reaching feature parity. However, we&#039;re not planning to remove the&lt;br /&gt;
autoconf/make buildsystem in the near future. Likely we&#039;re going to keep at&lt;br /&gt;
least the parts required for PGXS to keep working around until all supported&lt;br /&gt;
versions build with meson.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Meson documentation ==&lt;br /&gt;
&lt;br /&gt;
* [https://mesonbuild.com/Commands.html meson commandline commands]&lt;br /&gt;
* [https://mesonbuild.com/Syntax.html meson syntax]&lt;br /&gt;
* [https://mesonbuild.com/Reference-manual_functions.html meson functions]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Development tree, other resources ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/anarazel/postgres/tree/meson&lt;br /&gt;
* https://wiki.postgresql.org/wiki/PgCon_2022_Developer_Unconference#Meson_new_build_system_proposal&lt;br /&gt;
&lt;br /&gt;
== Visualizing builds ==&lt;br /&gt;
&lt;br /&gt;
When building with ninja, the generated .ninja_log can be uploaded to [https://ui.perfetto.dev/ ui.perfetto.dev], which is very helpful to visualize builds.&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37230</id>
		<title>Meson</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37230"/>
		<updated>2022-09-21T16:20:23Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quickstart ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ translation of configure, make, etc commands &lt;br /&gt;
!description&lt;br /&gt;
!old command&lt;br /&gt;
!new command&lt;br /&gt;
!comment&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree&lt;br /&gt;
|| ./configure [&amp;lt;options&amp;gt;]&lt;br /&gt;
|| meson setup [&amp;lt;options&amp;gt;] [&amp;lt;build dir&amp;gt;] &amp;lt;source-dir&amp;gt; &lt;br /&gt;
|| meson only supports building out of tree&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree for visual studio&lt;br /&gt;
|| perl src/tools/msvc/mkvcbuild.pl&lt;br /&gt;
|| meson setup --backend vs [&amp;lt;options&amp;gt;] [&amp;lt;build dir&amp;gt;] &amp;lt;source-dir&amp;gt;&lt;br /&gt;
|| configures build tree for one build type (debug or release or ...)&lt;br /&gt;
|-&lt;br /&gt;
|| show configure options&lt;br /&gt;
|| ./configure --help&lt;br /&gt;
|| meson configure&lt;br /&gt;
|| shows options built into meson and PostgreSQL specific options&lt;br /&gt;
|-&lt;br /&gt;
|| set configure options&lt;br /&gt;
|| ./configure --prefix=DIR, --$somedir=DIR, --with-$option, --enable-$feature&lt;br /&gt;
|| meson setup|configure -D$option=$value&lt;br /&gt;
|| options can be set when setting up build tree (setup) and in existing build tree (configure)&lt;br /&gt;
|- &lt;br /&gt;
|| enable cassert&lt;br /&gt;
|| --enable-cassert&lt;br /&gt;
|| -Dcassert=true&lt;br /&gt;
|-&lt;br /&gt;
|| enable debug symbols&lt;br /&gt;
|| ./configure --enable-debug&lt;br /&gt;
|| meson configure|setup -Ddebug=true&lt;br /&gt;
|-&lt;br /&gt;
|| specify compiler&lt;br /&gt;
|| CC=compiler ./configure&lt;br /&gt;
|| CC=compiler meson setup &lt;br /&gt;
|| CC is only checked during meson setup, not with meson configure&lt;br /&gt;
|-&lt;br /&gt;
|| set CFLAGS&lt;br /&gt;
|| CFLAGS=options ./configure&lt;br /&gt;
|| meson configure|setup -Dc_args=options&lt;br /&gt;
|| CFLAGS is also checked, but only for meson setup&lt;br /&gt;
|-&lt;br /&gt;
|| build&lt;br /&gt;
|| make -s&lt;br /&gt;
|| ninja&lt;br /&gt;
|| ninja uses parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| build, showing compiler commands&lt;br /&gt;
|| make&lt;br /&gt;
|| ninja -v&lt;br /&gt;
|| ninja uses parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| run all tests&lt;br /&gt;
|| make check-world&lt;br /&gt;
|| meson test&lt;br /&gt;
|| runs all test, using parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| run main regression tests&lt;br /&gt;
|| make check&lt;br /&gt;
|| meson test --suite setup --suite main&lt;br /&gt;
|-&lt;br /&gt;
|| list tests&lt;br /&gt;
|&lt;br /&gt;
|| meson test --list&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Installing Meson ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Debian / Ubuntu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update &amp;amp;&amp;amp; apt-get install -y meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 8:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install dnf-plugins-core&lt;br /&gt;
dnf config-manager --set-enabled powertools&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 9:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
???&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MacOS ===&lt;br /&gt;
&lt;br /&gt;
With MacPorts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo port install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments to meson setup/configure to find MacPorts libraries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/opt/local/lib/pkgconfig -Dextra_lib_dirs=/opt/local/lib/ -Dextra_include_dirs=/opt/local/include $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With Homebrew:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
brew install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments to meson setup/configure to find Homebrew libraries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/opt/homebrew/lib/pkgconfig/ -Dextra_include_dirs=/opt/homebrew/include/ -Dextra_lib_dirs=/opt/homebrew/lib $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Assuming python is installed, the easiest way to get meson and ninja is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install meson ninja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why and What ==&lt;br /&gt;
&lt;br /&gt;
Autoconf is showing its age, fewer and fewer contributors know how to wrangle&lt;br /&gt;
it. Recursive make has a lot of hard to resolve dependency issues and slow&lt;br /&gt;
incremental rebuilds. Our home-grown MSVC buildsystem is hard to maintain for&lt;br /&gt;
developers not using windows and runs tests serially. While these and other&lt;br /&gt;
issues could individually be addressed with incremental improvements, together&lt;br /&gt;
they seem best addressed by moving to a more modern buildsystem.&lt;br /&gt;
&lt;br /&gt;
After evaluating different buildsystem choices, we chose to use meson, to a&lt;br /&gt;
good degree based on the adoption by other open source projects.&lt;br /&gt;
&lt;br /&gt;
We decided that it&#039;s more realistic to commit a relatively early version of&lt;br /&gt;
the new buildsystem and mature it in tree.&lt;br /&gt;
&lt;br /&gt;
The plan is to remove the msvc specific buildsystem in src/tools/msvc soon&lt;br /&gt;
after reaching feature parity. However, we&#039;re not planning to remove the&lt;br /&gt;
autoconf/make buildsystem in the near future. Likely we&#039;re going to keep at&lt;br /&gt;
least the parts required for PGXS to keep working around until all supported&lt;br /&gt;
versions build with meson.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Meson documentation ==&lt;br /&gt;
&lt;br /&gt;
* [https://mesonbuild.com/Commands.html meson commandline commands]&lt;br /&gt;
* [https://mesonbuild.com/Syntax.html meson syntax]&lt;br /&gt;
* [https://mesonbuild.com/Reference-manual_functions.html meson functions]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Development tree, other resources ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/anarazel/postgres/tree/meson&lt;br /&gt;
* https://wiki.postgresql.org/wiki/PgCon_2022_Developer_Unconference#Meson_new_build_system_proposal&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37229</id>
		<title>Meson</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37229"/>
		<updated>2022-09-21T16:19:00Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quickstart ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ translation of configure, make, etc commands &lt;br /&gt;
!description&lt;br /&gt;
!old command&lt;br /&gt;
!new command&lt;br /&gt;
!comment&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree&lt;br /&gt;
|| ./configure [&amp;lt;options&amp;gt;]&lt;br /&gt;
|| meson setup [&amp;lt;options&amp;gt;] [&amp;lt;build dir&amp;gt;] &amp;lt;source-dir&amp;gt; &lt;br /&gt;
|| meson only supports building out of tree&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree for visual studio&lt;br /&gt;
|| perl src/tools/msvc/mkvcbuild.pl&lt;br /&gt;
|| meson setup --backend vs [&amp;lt;options&amp;gt;] [&amp;lt;build dir&amp;gt;] &amp;lt;source-dir&amp;gt;&lt;br /&gt;
|| configures build tree for one build type (debug or release or ...)&lt;br /&gt;
|-&lt;br /&gt;
|| show configure options&lt;br /&gt;
|| ./configure --help&lt;br /&gt;
|| meson configure&lt;br /&gt;
|| shows options built into meson and PostgreSQL specific options&lt;br /&gt;
|-&lt;br /&gt;
|| set configure options&lt;br /&gt;
|| ./configure --prefix=DIR, --$somedir=DIR, --with-$option, --enable-$feature&lt;br /&gt;
|| meson setup|configure -D$option=$value&lt;br /&gt;
|| options can be set when setting up build tree (setup) and in existing build tree (configure)&lt;br /&gt;
|- &lt;br /&gt;
|| enable cassert&lt;br /&gt;
|| --enable-cassert&lt;br /&gt;
|| -Dcassert=true&lt;br /&gt;
|-&lt;br /&gt;
|| enable debug symbols&lt;br /&gt;
|| ./configure --enable-debug&lt;br /&gt;
|| meson configure|setup -Ddebug=true&lt;br /&gt;
|-&lt;br /&gt;
|| specify compiler&lt;br /&gt;
|| CC=compiler ./configure&lt;br /&gt;
|| CC=compiler meson setup &lt;br /&gt;
|-&lt;br /&gt;
|| set CFLAGS&lt;br /&gt;
|| CFLAGS=options ./configure&lt;br /&gt;
|| meson configure|setup -Dc_args=options&lt;br /&gt;
|| CFLAGS is also checked, but only for meson setup&lt;br /&gt;
|-&lt;br /&gt;
|| build&lt;br /&gt;
|| make -s&lt;br /&gt;
|| ninja&lt;br /&gt;
|| ninja uses parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| build, showing compiler commands&lt;br /&gt;
|| make&lt;br /&gt;
|| ninja -v&lt;br /&gt;
|| ninja uses parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| run all tests&lt;br /&gt;
|| make check-world&lt;br /&gt;
|| meson test&lt;br /&gt;
|| runs all test, using parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| run main regression tests&lt;br /&gt;
|| make check&lt;br /&gt;
|| meson test --suite setup --suite main&lt;br /&gt;
|-&lt;br /&gt;
|| list tests&lt;br /&gt;
|&lt;br /&gt;
|| meson test --list&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Installing Meson ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Debian / Ubuntu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update &amp;amp;&amp;amp; apt-get install -y meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 8:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install dnf-plugins-core&lt;br /&gt;
dnf config-manager --set-enabled powertools&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 9:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
???&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MacOS ===&lt;br /&gt;
&lt;br /&gt;
With MacPorts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo port install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments to meson setup/configure to find MacPorts libraries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/opt/local/lib/pkgconfig -Dextra_lib_dirs=/opt/local/lib/ -Dextra_include_dirs=/opt/local/include $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With Homebrew:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
brew install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments to meson setup/configure to find Homebrew libraries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/opt/homebrew/lib/pkgconfig/ -Dextra_include_dirs=/opt/homebrew/include/ -Dextra_lib_dirs=/opt/homebrew/lib $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Assuming python is installed, the easiest way to get meson and ninja is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install meson ninja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why and What ==&lt;br /&gt;
&lt;br /&gt;
Autoconf is showing its age, fewer and fewer contributors know how to wrangle&lt;br /&gt;
it. Recursive make has a lot of hard to resolve dependency issues and slow&lt;br /&gt;
incremental rebuilds. Our home-grown MSVC buildsystem is hard to maintain for&lt;br /&gt;
developers not using windows and runs tests serially. While these and other&lt;br /&gt;
issues could individually be addressed with incremental improvements, together&lt;br /&gt;
they seem best addressed by moving to a more modern buildsystem.&lt;br /&gt;
&lt;br /&gt;
After evaluating different buildsystem choices, we chose to use meson, to a&lt;br /&gt;
good degree based on the adoption by other open source projects.&lt;br /&gt;
&lt;br /&gt;
We decided that it&#039;s more realistic to commit a relatively early version of&lt;br /&gt;
the new buildsystem and mature it in tree.&lt;br /&gt;
&lt;br /&gt;
The plan is to remove the msvc specific buildsystem in src/tools/msvc soon&lt;br /&gt;
after reaching feature parity. However, we&#039;re not planning to remove the&lt;br /&gt;
autoconf/make buildsystem in the near future. Likely we&#039;re going to keep at&lt;br /&gt;
least the parts required for PGXS to keep working around until all supported&lt;br /&gt;
versions build with meson.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Meson documentation ==&lt;br /&gt;
&lt;br /&gt;
* [https://mesonbuild.com/Commands.html meson commandline commands]&lt;br /&gt;
* [https://mesonbuild.com/Syntax.html meson syntax]&lt;br /&gt;
* [https://mesonbuild.com/Reference-manual_functions.html meson functions]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Development tree, other resources ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/anarazel/postgres/tree/meson&lt;br /&gt;
* https://wiki.postgresql.org/wiki/PgCon_2022_Developer_Unconference#Meson_new_build_system_proposal&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37228</id>
		<title>Meson</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37228"/>
		<updated>2022-09-21T05:14:23Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quickstart ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ translation of configure, make, etc commands &lt;br /&gt;
!description&lt;br /&gt;
!old command&lt;br /&gt;
!new command&lt;br /&gt;
!comment&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree&lt;br /&gt;
|| ./configure [&amp;lt;options&amp;gt;]&lt;br /&gt;
|| meson setup [&amp;lt;options&amp;gt;] [&amp;lt;build dir&amp;gt;] &amp;lt;source-dir&amp;gt; &lt;br /&gt;
|| meson only supports building out of tree&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree for visual studio&lt;br /&gt;
|| perl src/tools/msvc/mkvcbuild.pl&lt;br /&gt;
|| meson setup --backend vs [&amp;lt;options&amp;gt;] [&amp;lt;build dir&amp;gt;] &amp;lt;source-dir&amp;gt;&lt;br /&gt;
|| configures build tree for one build type (debug or release or ...)&lt;br /&gt;
|-&lt;br /&gt;
|| show configure options&lt;br /&gt;
|| ./configure --help&lt;br /&gt;
|| meson configure&lt;br /&gt;
|| shows options built into meson and PostgreSQL specific options&lt;br /&gt;
|-&lt;br /&gt;
|| set configure options&lt;br /&gt;
|| ./configure --prefix=DIR, --$somedir=DIR, --with-$option, --enable-$feature&lt;br /&gt;
|| meson setup|configure -D$option=$value&lt;br /&gt;
|| options can be set when setting up build tree (setup) and in existing build tree (configure)&lt;br /&gt;
|- &lt;br /&gt;
|| enable cassert&lt;br /&gt;
|| --enable-cassert&lt;br /&gt;
|| -Dcassert=true&lt;br /&gt;
|-&lt;br /&gt;
|| enable debug symbols&lt;br /&gt;
|| ./configure --enable-debug&lt;br /&gt;
|| meson configure|setup -Ddebug=true&lt;br /&gt;
|-&lt;br /&gt;
|| specify compiler&lt;br /&gt;
|| CC=compiler ./configure&lt;br /&gt;
|| CC=compiler meson setup &lt;br /&gt;
|-&lt;br /&gt;
|| set CFLAGS&lt;br /&gt;
|| CFLAGS=options ./configure&lt;br /&gt;
|| meson configure|setup -Dc_args=options&lt;br /&gt;
|| CFLAGS is also checked, but only for meson setup&lt;br /&gt;
|-&lt;br /&gt;
|| build&lt;br /&gt;
|| make -s&lt;br /&gt;
|| ninja&lt;br /&gt;
|| ninja uses parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| build, showing compiler commands&lt;br /&gt;
|| make&lt;br /&gt;
|| ninja -v&lt;br /&gt;
|| ninja uses parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| run all tests&lt;br /&gt;
|| make check-world&lt;br /&gt;
|| meson test&lt;br /&gt;
|| runs all test, using parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| run main regression tests&lt;br /&gt;
|| make check&lt;br /&gt;
|| meson test --suite setup --suite main&lt;br /&gt;
|-&lt;br /&gt;
|| list tests&lt;br /&gt;
|&lt;br /&gt;
|| meson test --list&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Installing Meson ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Debian / Ubuntu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update &amp;amp;&amp;amp; apt-get install -y meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 8:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install dnf-plugins-core&lt;br /&gt;
dnf config-manager --set-enabled powertools&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 9:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
???&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MacOS ===&lt;br /&gt;
&lt;br /&gt;
With MacPorts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo port install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments to meson setup/configure to find MacPorts libraries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/opt/local/lib/pkgconfig -Dextra_lib_dirs=/opt/local/lib/ -Dextra_include_dirs=/opt/local/include $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With Homebrew:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
brew install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments to meson setup/configure to find Homebrew libraries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/opt/homebrew/lib/pkgconfig/ -Dextra_include_dirs=/opt/homebrew/include/ -Dextra_lib_dirs=/opt/homebrew/lib $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Assuming python is installed, the easiest way to get meson and ninja is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install meson ninja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Meson documentation ==&lt;br /&gt;
&lt;br /&gt;
* [https://mesonbuild.com/Commands.html meson commandline commands]&lt;br /&gt;
* [https://mesonbuild.com/Syntax.html meson syntax]&lt;br /&gt;
* [https://mesonbuild.com/Reference-manual_functions.html meson functions]&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37227</id>
		<title>Meson</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37227"/>
		<updated>2022-09-21T00:08:51Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quickstart ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ translation of configure, make, etc commands &lt;br /&gt;
!description&lt;br /&gt;
!old command&lt;br /&gt;
!new command&lt;br /&gt;
!comment&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree&lt;br /&gt;
|| ./configure [&amp;lt;options&amp;gt;]&lt;br /&gt;
|| meson setup [&amp;lt;options&amp;gt;] &amp;lt;source-dir&amp;gt; [&amp;lt;build dir&amp;gt;]&lt;br /&gt;
|| meson only supports building out of tree&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree for visual studio&lt;br /&gt;
|| perl src/tools/msvc/mkvcbuild.pl&lt;br /&gt;
|| meson setup --backend vs [&amp;lt;options&amp;gt;] &amp;lt;source-dir&amp;gt; [&amp;lt;build dir&amp;gt;]&lt;br /&gt;
|| configures build tree for one build type (debug or release or ...)&lt;br /&gt;
|-&lt;br /&gt;
|| show configure options&lt;br /&gt;
|| ./configure --help&lt;br /&gt;
|| meson configure&lt;br /&gt;
|| shows options built into meson and PostgreSQL specific options&lt;br /&gt;
|-&lt;br /&gt;
|| set configure options&lt;br /&gt;
|| ./configure --prefix=DIR, --$somedir=DIR, --with-$option, --enable-$feature&lt;br /&gt;
|| meson setup|configure -D$option=$value&lt;br /&gt;
|| options can be set when setting up build tree (setup) and in existing build tree (configure)&lt;br /&gt;
|- &lt;br /&gt;
|| enable cassert&lt;br /&gt;
|| --enable-cassert&lt;br /&gt;
|| -Dcassert=true&lt;br /&gt;
|-&lt;br /&gt;
|| enable debug symbols&lt;br /&gt;
|| ./configure --enable-debug&lt;br /&gt;
|| meson configure|setup -Ddebug=true&lt;br /&gt;
|-&lt;br /&gt;
|| specify compiler&lt;br /&gt;
|| CC=compiler ./configure&lt;br /&gt;
|| CC=compiler meson setup &lt;br /&gt;
|-&lt;br /&gt;
|| set CFLAGS&lt;br /&gt;
|| CFLAGS=options ./configure&lt;br /&gt;
|| meson configure|setup -Dc_args=options&lt;br /&gt;
|| CFLAGS is also checked, but only for meson setup&lt;br /&gt;
|-&lt;br /&gt;
|| build&lt;br /&gt;
|| make -s&lt;br /&gt;
|| ninja&lt;br /&gt;
|| ninja uses parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| build, showing compiler commands&lt;br /&gt;
|| make&lt;br /&gt;
|| ninja -v&lt;br /&gt;
|| ninja uses parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| run all tests&lt;br /&gt;
|| make check-world&lt;br /&gt;
|| meson test&lt;br /&gt;
|| runs all test, using parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| run main regression tests&lt;br /&gt;
|| make check&lt;br /&gt;
|| meson test --suite setup --suite main&lt;br /&gt;
|-&lt;br /&gt;
|| list tests&lt;br /&gt;
|&lt;br /&gt;
|| meson test --list&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Installing Meson ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Debian / Ubuntu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update &amp;amp;&amp;amp; apt-get install -y meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 8:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install dnf-plugins-core&lt;br /&gt;
dnf config-manager --set-enabled powertools&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 9:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
???&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MacOS ===&lt;br /&gt;
&lt;br /&gt;
With MacPorts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo port install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments to meson setup/configure to find MacPorts libraries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/opt/local/lib/pkgconfig -Dextra_lib_dirs=/opt/local/lib/ -Dextra_include_dirs=/opt/local/include $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With Homebrew:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
brew install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments to meson setup/configure to find MacPorts libraries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/opt/homebrew/lib/pkgconfig/ -Dextra_include_dirs=/opt/homebrew/include/ -Dextra_lib_dirs=/opt/homebrew/lib $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Assuming python is installed, the easiest way to get meson and ninja is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install meson ninja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Meson documentation ==&lt;br /&gt;
&lt;br /&gt;
* [https://mesonbuild.com/Commands.html meson commandline commands]&lt;br /&gt;
* [https://mesonbuild.com/Syntax.html meson syntax]&lt;br /&gt;
* [https://mesonbuild.com/Reference-manual_functions.html meson functions]&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37226</id>
		<title>Meson</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37226"/>
		<updated>2022-09-20T23:20:19Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quickstart ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ translation of configure, make, etc commands &lt;br /&gt;
!description&lt;br /&gt;
!old command&lt;br /&gt;
!new command&lt;br /&gt;
!comment&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree&lt;br /&gt;
|| ./configure [&amp;lt;options&amp;gt;]&lt;br /&gt;
|| meson setup [&amp;lt;options&amp;gt;] &amp;lt;source-dir&amp;gt; [&amp;lt;build dir&amp;gt;]&lt;br /&gt;
|| meson only supports building out of tree&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree for visual studio&lt;br /&gt;
|| perl src/tools/msvc/mkvcbuild.pl&lt;br /&gt;
|| meson setup --backend vs [&amp;lt;options&amp;gt;] &amp;lt;source-dir&amp;gt; [&amp;lt;build dir&amp;gt;]&lt;br /&gt;
|| configures build tree for one build type (debug or release or ...)&lt;br /&gt;
|-&lt;br /&gt;
|| show configure options&lt;br /&gt;
|| ./configure --help&lt;br /&gt;
|| meson configure&lt;br /&gt;
|| shows options built into meson and PostgreSQL specific options&lt;br /&gt;
|-&lt;br /&gt;
|| set configure options&lt;br /&gt;
|| ./configure --prefix=DIR, --$somedir=DIR, --with-$option, --enable-$feature&lt;br /&gt;
|| meson setup|configure -D$option=$value&lt;br /&gt;
|| options can be set when setting up build tree (setup) and in existing build tree (configure)&lt;br /&gt;
|- &lt;br /&gt;
|| enable cassert&lt;br /&gt;
|| --enable-cassert&lt;br /&gt;
|| -Dcassert=true&lt;br /&gt;
|-&lt;br /&gt;
|| enable debug symbols&lt;br /&gt;
|| ./configure --enable-debug&lt;br /&gt;
|| meson configure|setup -Ddebug=true&lt;br /&gt;
|-&lt;br /&gt;
|| specify compiler&lt;br /&gt;
|| CC=compiler ./configure&lt;br /&gt;
|| CC=compiler meson setup &lt;br /&gt;
|-&lt;br /&gt;
|| set CFLAGS&lt;br /&gt;
|| CFLAGS=options ./configure&lt;br /&gt;
|| meson configure|setup -Dc_args=options&lt;br /&gt;
|| CFLAGS is also checked, but only for meson setup&lt;br /&gt;
|-&lt;br /&gt;
|| build&lt;br /&gt;
|| make -s&lt;br /&gt;
|| ninja&lt;br /&gt;
|| ninja uses parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| build, showing compiler commands&lt;br /&gt;
|| make&lt;br /&gt;
|| ninja -v&lt;br /&gt;
|| ninja uses parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| run all tests&lt;br /&gt;
|| make check-world&lt;br /&gt;
|| meson test&lt;br /&gt;
|| runs all test, using parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| run main regression tests&lt;br /&gt;
|| make check&lt;br /&gt;
|| meson test --suite setup --suite main&lt;br /&gt;
|-&lt;br /&gt;
|| list tests&lt;br /&gt;
|&lt;br /&gt;
|| meson test --list&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Installing Meson ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Debian / Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update &amp;amp;&amp;amp; apt-get install -y meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 8:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install dnf-plugins-core&lt;br /&gt;
dnf config-manager --set-enabled powertools&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 9:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
???&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MacOS ===&lt;br /&gt;
&lt;br /&gt;
With MacPorts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo port install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments to meson setup/configure to find MacPorts libraries:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
meson setup -Dpkg_config_path=/opt/local/lib/pkgconfig -Dextra_lib_dirs=/opt/local/lib/ -Dextra_include_dirs=/opt/local/include $builddir $sourcedir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With Homebrew:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
brew install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Assuming python is installed, the easiest way to get meson and ninja is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install meson ninja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Meson documentation ==&lt;br /&gt;
&lt;br /&gt;
* [https://mesonbuild.com/Commands.html meson commandline commands]&lt;br /&gt;
* [https://mesonbuild.com/Syntax.html meson syntax]&lt;br /&gt;
* [https://mesonbuild.com/Reference-manual_functions.html meson functions]&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37225</id>
		<title>Meson</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Meson&amp;diff=37225"/>
		<updated>2022-09-20T22:52:31Z</updated>

		<summary type="html">&lt;p&gt;Andresfreund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quickstart ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ translation of configure, make, etc commands &lt;br /&gt;
!description&lt;br /&gt;
!old command&lt;br /&gt;
!new command&lt;br /&gt;
!comment&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree&lt;br /&gt;
|| ./configure [&amp;lt;options&amp;gt;]&lt;br /&gt;
|| meson setup [&amp;lt;options&amp;gt;] &amp;lt;source-dir&amp;gt; [&amp;lt;build dir&amp;gt;]&lt;br /&gt;
|| meson only supports building out of tree&lt;br /&gt;
|-&lt;br /&gt;
|| set up build tree for visual studio&lt;br /&gt;
|| perl src/tools/msvc/mkvcbuild.pl&lt;br /&gt;
|| meson setup --backend vs [&amp;lt;options&amp;gt;] &amp;lt;source-dir&amp;gt; [&amp;lt;build dir&amp;gt;]&lt;br /&gt;
|| configures build tree for one build type (debug or release or ...)&lt;br /&gt;
|-&lt;br /&gt;
|| show configure options&lt;br /&gt;
|| ./configure --help&lt;br /&gt;
|| meson configure&lt;br /&gt;
|| shows options built into meson and PostgreSQL specific options&lt;br /&gt;
|-&lt;br /&gt;
|| set configure options&lt;br /&gt;
|| ./configure --prefix=DIR, --$somedir=DIR, --with-$option, --enable-$feature&lt;br /&gt;
|| meson setup|configure -D$option=$value&lt;br /&gt;
|| options can be set when setting up build tree (setup) and in existing build tree (configure)&lt;br /&gt;
|- &lt;br /&gt;
|| enable cassert&lt;br /&gt;
|| --enable-cassert&lt;br /&gt;
|| -Dcassert=true&lt;br /&gt;
|-&lt;br /&gt;
|| enable debug symbols&lt;br /&gt;
|| ./configure --enable-debug&lt;br /&gt;
|| meson configure|setup -Ddebug=true&lt;br /&gt;
|-&lt;br /&gt;
|| specify compiler&lt;br /&gt;
|| CC=compiler ./configure&lt;br /&gt;
|| CC=compiler meson setup &lt;br /&gt;
|-&lt;br /&gt;
|| set CFLAGS&lt;br /&gt;
|| CFLAGS=options ./configure&lt;br /&gt;
|| meson configure|setup -Dc_args=options&lt;br /&gt;
|| CFLAGS is also checked, but only for meson setup&lt;br /&gt;
|-&lt;br /&gt;
|| build&lt;br /&gt;
|| make -s&lt;br /&gt;
|| ninja&lt;br /&gt;
|| ninja uses parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| build, showing compiler commands&lt;br /&gt;
|| make&lt;br /&gt;
|| ninja -v&lt;br /&gt;
|| ninja uses parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| run all tests&lt;br /&gt;
|| make check-world&lt;br /&gt;
|| meson test&lt;br /&gt;
|| runs all test, using parallelism by default&lt;br /&gt;
|-&lt;br /&gt;
|| run main regression tests&lt;br /&gt;
|| make check&lt;br /&gt;
|| meson test --suite setup --suite main&lt;br /&gt;
|-&lt;br /&gt;
|| list tests&lt;br /&gt;
|&lt;br /&gt;
|| meson test --list&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Installing Meson ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Debian / Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update &amp;amp;&amp;amp; apt-get install -y meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 8:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnf -y install dnf-plugins-core&lt;br /&gt;
dnf config-manager --set-enabled powertools&lt;br /&gt;
dnf -y install meson ninja-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RHEL 9:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
???&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MacOS ===&lt;br /&gt;
&lt;br /&gt;
With MacPorts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo port install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With Homebrew:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
brew install meson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Assuming python is installed, the easiest way to get meson and ninja is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install meson ninja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Meson documentation ==&lt;br /&gt;
&lt;br /&gt;
* [https://mesonbuild.com/Commands.html meson commandline commands]&lt;br /&gt;
* [https://mesonbuild.com/Syntax.html meson syntax]&lt;br /&gt;
* [https://mesonbuild.com/Reference-manual_functions.html meson functions]&lt;/div&gt;</summary>
		<author><name>Andresfreund</name></author>
	</entry>
</feed>