public inbox for [email protected]
help / color / mirror / Atom feed[PATCH 5/5] Ignore correlation for new BRIN opclasses
3+ messages / 3 participants
[nested] [flat]
* [PATCH 5/5] Ignore correlation for new BRIN opclasses
@ 2020-09-12 13:07 Tomas Vondra <[email protected]>
0 siblings, 0 replies; 3+ messages in thread
From: Tomas Vondra @ 2020-09-12 13:07 UTC (permalink / raw)
The new BRIN opclasses (bloom and minmax-multi) are less sensitive to
poorly correlated data, so just assume the data is perfectly correlated
during costing.
---
src/backend/access/brin/brin_bloom.c | 1 +
src/backend/access/brin/brin_minmax_multi.c | 1 +
src/backend/utils/adt/selfuncs.c | 19 ++++++++++++++++++-
src/include/access/brin_internal.h | 3 +++
4 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/src/backend/access/brin/brin_bloom.c b/src/backend/access/brin/brin_bloom.c
index c2cbbd9400..03e9d4b713 100644
--- a/src/backend/access/brin/brin_bloom.c
+++ b/src/backend/access/brin/brin_bloom.c
@@ -681,6 +681,7 @@ brin_bloom_opcinfo(PG_FUNCTION_ARGS)
result = palloc0(MAXALIGN(SizeofBrinOpcInfo(1)) +
sizeof(BloomOpaque));
+ result->oi_ignore_correlation = true;
result->oi_nstored = 1;
result->oi_regular_nulls = true;
result->oi_opaque = (BloomOpaque *)
diff --git a/src/backend/access/brin/brin_minmax_multi.c b/src/backend/access/brin/brin_minmax_multi.c
index 227927fcf5..c8f36b0c8a 100644
--- a/src/backend/access/brin/brin_minmax_multi.c
+++ b/src/backend/access/brin/brin_minmax_multi.c
@@ -1306,6 +1306,7 @@ brin_minmax_multi_opcinfo(PG_FUNCTION_ARGS)
result = palloc0(MAXALIGN(SizeofBrinOpcInfo(1)) +
sizeof(MinmaxMultiOpaque));
+ result->oi_ignore_correlation = true;
result->oi_nstored = 1;
result->oi_regular_nulls = true;
result->oi_opaque = (MinmaxMultiOpaque *)
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
index 00c7afc66f..c00265a66d 100644
--- a/src/backend/utils/adt/selfuncs.c
+++ b/src/backend/utils/adt/selfuncs.c
@@ -98,6 +98,7 @@
#include <math.h>
#include "access/brin.h"
+#include "access/brin_internal.h"
#include "access/brin_page.h"
#include "access/gin.h"
#include "access/table.h"
@@ -7350,7 +7351,8 @@ brincostestimate(PlannerInfo *root, IndexPath *path, double loop_count,
double minimalRanges;
double estimatedRanges;
double selec;
- Relation indexRel;
+ Relation indexRel = NULL;
+ TupleDesc tupdesc = NULL;
ListCell *l;
VariableStatData vardata;
@@ -7372,6 +7374,7 @@ brincostestimate(PlannerInfo *root, IndexPath *path, double loop_count,
*/
indexRel = index_open(index->indexoid, NoLock);
brinGetStats(indexRel, &statsData);
+ tupdesc = RelationGetDescr(indexRel);
index_close(indexRel, NoLock);
/* work out the actual number of ranges in the index */
@@ -7405,6 +7408,17 @@ brincostestimate(PlannerInfo *root, IndexPath *path, double loop_count,
{
IndexClause *iclause = lfirst_node(IndexClause, l);
AttrNumber attnum = index->indexkeys[iclause->indexcol];
+ FmgrInfo *opcInfoFn;
+ BrinOpcInfo *opcInfo;
+ Form_pg_attribute attr = TupleDescAttr(tupdesc, iclause->indexcol);
+ bool ignore_correlation;
+
+ opcInfoFn = index_getprocinfo(indexRel, iclause->indexcol + 1, BRIN_PROCNUM_OPCINFO);
+
+ opcInfo = (BrinOpcInfo *)
+ DatumGetPointer(FunctionCall1(opcInfoFn, attr->atttypid));
+
+ ignore_correlation = opcInfo->oi_ignore_correlation;
/* attempt to lookup stats in relation for this index column */
if (attnum != 0)
@@ -7475,6 +7489,9 @@ brincostestimate(PlannerInfo *root, IndexPath *path, double loop_count,
if (sslot.nnumbers > 0)
varCorrelation = Abs(sslot.numbers[0]);
+ if (ignore_correlation)
+ varCorrelation = 1.0;
+
if (varCorrelation > *indexCorrelation)
*indexCorrelation = varCorrelation;
diff --git a/src/include/access/brin_internal.h b/src/include/access/brin_internal.h
index ee4d0706df..67aea62a02 100644
--- a/src/include/access/brin_internal.h
+++ b/src/include/access/brin_internal.h
@@ -30,6 +30,9 @@ typedef struct BrinOpcInfo
/* Regular processing of NULLs in BrinValues? */
bool oi_regular_nulls;
+ /* Ignore correlation during cost estimation */
+ bool oi_ignore_correlation;
+
/* Opaque pointer for the opclass' private use */
void *oi_opaque;
--
2.25.4
--c7tltgiw2u7hovas--
^ permalink raw reply [nested|flat] 3+ messages in thread
* Re: getting "shell command argument contains a newline or carriage return:" error with pg_dumpall when db name have new line in double quote
@ 2026-01-20 06:29 Mahendra Singh Thalor <[email protected]>
2026-01-29 14:37 ` Re: getting "shell command argument contains a newline or carriage return:" error with pg_dumpall when db name have new line in double quote Andrew Dunstan <[email protected]>
0 siblings, 1 reply; 3+ messages in thread
From: Mahendra Singh Thalor @ 2026-01-20 06:29 UTC (permalink / raw)
To: Nathan Bossart <[email protected]>; +Cc: Andrew Dunstan <[email protected]>; Tom Lane <[email protected]>; Álvaro Herrera <[email protected]>; Srinath Reddy <[email protected]>; [email protected]
On Tue, 24 Jun 2025 at 11:37, Mahendra Singh Thalor <[email protected]> wrote:
>
> On Fri, 11 Apr 2025 at 20:17, Nathan Bossart <[email protected]> wrote:
> >
> > On Thu, Apr 10, 2025 at 11:58:41PM +0530, Mahendra Singh Thalor wrote:
> > > As per above discussions, for v18, we will not do any change to server
> > > side to fix the issue of \n\r in database names. But as a cleanup
> > > patch, we can give an alert to the user by "pg_upgrade --check". As
> > > per current code, pg_dump and pg_upgrade will fail with "shell
> > > command" error but in the attached patch, we will give some extra info
> > > to the user by "pg_upgrade --check" so that they can fix database
> > > names before trying to upgrade.
> > >
> > > Here, I am attaching a patch which will give a list of invalid
> > > database names in "pg_upgrade --check". We can consider this as a
> > > cleanup patch.
> >
> > Are you proposing this for v18? I think this is all v19 material at this
> > point. Perhaps we could argue this is a bug fix that should be
> > back-patched, but IMHO that's a bit of a stretch. I don't sense a
> > tremendous amount of urgency, either.
> >
> > --
> > nathan
>
> Thanks Nathan for the review.
>
> I want to re-start this thread for v19. I posted v06* patches in my previous updates[1]. Please someone review it and let me know feedback.
>
> v06 patches: v06_patches
>
> [1] : https://www.postgresql.org/message-id/CAKYtNAqC5pkjmh8UgvbNLtMyEVeKUtDF3_%2B9dvG9zb8YrhTJQQ%40mail.g...
>
> --
> Thanks and Regards
> Mahendra Singh Thalor
> EnterpriseDB: http://www.enterprisedb.com
Hi,
Here I am attaching updated patches for the review. Please someone review it.
--
Thanks and Regards
Mahendra Singh Thalor
EnterpriseDB: http://www.enterprisedb.com
Attachments:
[application/octet-stream] v07_0001_don-t-allow-newline-or-carriage-return-in-db-user-role-names.patch (7.9K, ../../CAKYtNArwMfw1OSTSucZz1ei829xpzMKL50rXDDV02-5Z61Yv-w@mail.gmail.com/2-v07_0001_don-t-allow-newline-or-carriage-return-in-db-user-role-names.patch)
download | inline diff:
From 7989fb82e0fe26d3cbd9627825fb044f0f915a7d Mon Sep 17 00:00:00 2001
From: Mahendra Singh Thalor <[email protected]>
Date: Tue, 20 Jan 2026 11:52:46 +0530
Subject: [PATCH 1/2] don't allow newline or carriage return character in name
for database/user/role
While creating database, if database name has any newline or carriage
return character in name, then through error becuase these special
character are not allowed in dbname when dump command is executed.
do same for "CREATE ROLE", "CREATE USER" also.
This will add check for:
"CREATE DATABASE", "CREATE ROLE", "CREATE USER",
"RENAME DATABASE/USER/ROLE"
-------------------------
As we will not allow these \n\r in names, then we will never get these
names in dump also.
If we are dumping from older branch, then we will fail with same old error.
(dump will fail in older branches so no need to add extra handling for dump.)
Also remove comment added by 142c24c23447f212e642a0ffac9af878b93f490d commit.
Remove one test of 8b845520fb0aa50fea7aae44a45cee1b6d87845d commit.
---
src/backend/commands/dbcommands.c | 4 ++++
src/backend/commands/define.c | 18 ++++++++++++++++++
src/backend/commands/user.c | 4 ++++
src/bin/pg_dump/t/010_dump_connstr.pl | 14 --------------
src/bin/scripts/t/020_createdb.pl | 12 ++++++++++++
src/bin/scripts/t/040_createuser.pl | 4 ++++
src/fe_utils/string_utils.c | 6 ------
src/include/commands/defrem.h | 1 +
8 files changed, 43 insertions(+), 20 deletions(-)
mode change 100644 => 100755 src/bin/pg_dump/t/010_dump_connstr.pl
mode change 100644 => 100755 src/bin/scripts/t/020_createdb.pl
mode change 100644 => 100755 src/bin/scripts/t/040_createuser.pl
diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c
index 87949054f26..e8ac4c2eef0 100644
--- a/src/backend/commands/dbcommands.c
+++ b/src/backend/commands/dbcommands.c
@@ -742,6 +742,8 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt)
CreateDBStrategy dbstrategy = CREATEDB_WAL_LOG;
createdb_failure_params fparms;
+ check_lfcr_in_objname(dbname, "database");
+
/* Extract options from the statement node tree */
foreach(option, stmt->options)
{
@@ -1910,6 +1912,8 @@ RenameDatabase(const char *oldname, const char *newname)
int npreparedxacts;
ObjectAddress address;
+ check_lfcr_in_objname(newname, "database");
+
/*
* Look up the target database's OID, and get exclusive lock on it. We
* need this for the same reasons as DROP DATABASE.
diff --git a/src/backend/commands/define.c b/src/backend/commands/define.c
index 4172cc9bacb..cd166602e02 100644
--- a/src/backend/commands/define.c
+++ b/src/backend/commands/define.c
@@ -374,3 +374,21 @@ errorConflictingDefElem(DefElem *defel, ParseState *pstate)
errmsg("conflicting or redundant options"),
parser_errposition(pstate, defel->location));
}
+
+/*
+ * check_lfcr_in_objname
+ *
+ * If name has a newline or carriage return character then error will be reported
+ * as these special characters are not allowed in names due to shell command error
+ * in dump.
+ */
+void
+check_lfcr_in_objname(const char *objname, const char *objtype)
+{
+ /* Report error if name has \n or \r character. */
+ if (strpbrk(objname, "\n\r"))
+ ereport(ERROR,
+ (errcode(ERRCODE_INVALID_PARAMETER_VALUE)),
+ errmsg("%s name contains a newline or carriage return character", objtype),
+ errdetail("invalid %s name is \"%s\"", objtype, objname));
+}
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
index 8fb9ea25db0..13f1162b4d3 100644
--- a/src/backend/commands/user.c
+++ b/src/backend/commands/user.c
@@ -171,6 +171,8 @@ CreateRole(ParseState *pstate, CreateRoleStmt *stmt)
DefElem *dbypassRLS = NULL;
GrantRoleOptions popt;
+ check_lfcr_in_objname(stmt->role, "role");
+
/* The defaults can vary depending on the original statement type */
switch (stmt->stmt_type)
{
@@ -1348,6 +1350,8 @@ RenameRole(const char *oldname, const char *newname)
ObjectAddress address;
Form_pg_authid authform;
+ check_lfcr_in_objname(newname, "role");
+
rel = table_open(AuthIdRelationId, RowExclusiveLock);
dsc = RelationGetDescr(rel);
diff --git a/src/bin/pg_dump/t/010_dump_connstr.pl b/src/bin/pg_dump/t/010_dump_connstr.pl
old mode 100644
new mode 100755
index dc7a33658db..bf2c3b6d00b
--- a/src/bin/pg_dump/t/010_dump_connstr.pl
+++ b/src/bin/pg_dump/t/010_dump_connstr.pl
@@ -153,20 +153,6 @@ $node->command_ok(
],
'pg_dumpall --dbname accepts connection string');
-$node->run_log(
- [ 'createdb', '--username' => $src_bootstrap_super, "foo\n\rbar" ]);
-
-# not sufficient to use --roles-only here
-$node->command_fails(
- [
- 'pg_dumpall', '--no-sync',
- '--username' => $src_bootstrap_super,
- '--file' => $discard,
- ],
- 'pg_dumpall with \n\r in database name');
-$node->run_log(
- [ 'dropdb', '--username' => $src_bootstrap_super, "foo\n\rbar" ]);
-
# make a table, so the parallel worker has something to dump
$node->safe_psql(
diff --git a/src/bin/scripts/t/020_createdb.pl b/src/bin/scripts/t/020_createdb.pl
old mode 100644
new mode 100755
index 83b0077383a..202c4462209
--- a/src/bin/scripts/t/020_createdb.pl
+++ b/src/bin/scripts/t/020_createdb.pl
@@ -241,6 +241,18 @@ $node->command_fails(
],
'fails for invalid locale provider');
+$node->command_fails_like(
+ [ 'createdb', "invalid \n dbname" ],
+ qr/ERROR: database name contains a newline or carriage return character/,
+ 'fails if database name containing newline character in name'
+);
+
+$node->command_fails_like(
+ [ 'createdb', "invalid \r dbname" ],
+ qr/ERROR: database name contains a newline or carriage return character/,
+ 'fails if database name containing carriage return character in name'
+);
+
# Check use of templates with shared dependencies copied from the template.
my ($ret, $stdout, $stderr) = $node->psql(
'foobar2',
diff --git a/src/bin/scripts/t/040_createuser.pl b/src/bin/scripts/t/040_createuser.pl
old mode 100644
new mode 100755
index 0fbb91ce330..de8524f5a57
--- a/src/bin/scripts/t/040_createuser.pl
+++ b/src/bin/scripts/t/040_createuser.pl
@@ -89,5 +89,9 @@ $node->command_fails(
'regress_user3'
],
'fails for too many non-options');
+$node->command_fails([ 'createuser', "invalid \n username" ],
+ 'fails as newline is not allowed in role name');
+$node->command_fails([ 'createuser', "invalid \r username" ],
+ 'fails as carraige return is not allowed in role name');
done_testing();
diff --git a/src/fe_utils/string_utils.c b/src/fe_utils/string_utils.c
index d87f1d476f3..c3f88e07cce 100644
--- a/src/fe_utils/string_utils.c
+++ b/src/fe_utils/string_utils.c
@@ -568,12 +568,6 @@ appendByteaLiteral(PQExpBuffer buf, const unsigned char *str, size_t length,
* Append the given string to the shell command being built in the buffer,
* with shell-style quoting as needed to create exactly one argument.
*
- * Forbid LF or CR characters, which have scant practical use beyond designing
- * security breaches. The Windows command shell is unusable as a conduit for
- * arguments containing LF or CR characters. A future major release should
- * reject those characters in CREATE ROLE and CREATE DATABASE, because use
- * there eventually leads to errors here.
- *
* appendShellString() simply prints an error and dies if LF or CR appears.
* appendShellStringNoError() omits those characters from the result, and
* returns false if there were any.
diff --git a/src/include/commands/defrem.h b/src/include/commands/defrem.h
index 8f4a2d9bbc1..af51ac92563 100644
--- a/src/include/commands/defrem.h
+++ b/src/include/commands/defrem.h
@@ -162,5 +162,6 @@ extern TypeName *defGetTypeName(DefElem *def);
extern int defGetTypeLength(DefElem *def);
extern List *defGetStringList(DefElem *def);
pg_noreturn extern void errorConflictingDefElem(DefElem *defel, ParseState *pstate);
+extern void check_lfcr_in_objname(const char *objname, const char *objtype);
#endif /* DEFREM_H */
--
2.47.3
[application/octet-stream] v07_0002-add-handling-to-pg_upgrade-to-report-alert-for-invalid-names.patch (3.5K, ../../CAKYtNArwMfw1OSTSucZz1ei829xpzMKL50rXDDV02-5Z61Yv-w@mail.gmail.com/3-v07_0002-add-handling-to-pg_upgrade-to-report-alert-for-invalid-names.patch)
download | inline diff:
From ee1ed7e117a2799c7c1a5ea36f6581a3970ff179 Mon Sep 17 00:00:00 2001
From: Mahendra Singh Thalor <[email protected]>
Date: Tue, 20 Jan 2026 11:53:35 +0530
Subject: [PATCH 2/2] add handling to pg_upgrade to report alert for invalid
database, user and role names.
If database/role/user name has any newline or carraige return character
in name, then pg_upgrade will report ALERT for these.
---
---
src/bin/pg_upgrade/check.c | 73 ++++++++++++++++++++++++++++++++++++++
1 file changed, 73 insertions(+)
diff --git a/src/bin/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c
index 64805fef0eb..5a9403c955f 100644
--- a/src/bin/pg_upgrade/check.c
+++ b/src/bin/pg_upgrade/check.c
@@ -34,6 +34,7 @@ static void check_new_cluster_replication_slots(void);
static void check_new_cluster_subscription_configuration(void);
static void check_old_cluster_for_valid_slots(void);
static void check_old_cluster_subscription_state(void);
+static void check_database_role_names_in_old_cluser(ClusterInfo *cluster);
/*
* DataTypesUsageChecks - definitions of data type checks for the old cluster
@@ -602,6 +603,9 @@ check_and_dump_old_cluster(void)
*/
check_for_connection_status(&old_cluster);
+ /* Validate database, user and role names from old cluser. */
+ check_database_role_names_in_old_cluser(&old_cluster);
+
/*
* Extract a list of databases, tables, and logical replication slots from
* the old cluster.
@@ -2523,3 +2527,72 @@ check_old_cluster_subscription_state(void)
else
check_ok();
}
+
+/*
+ * check_database_role_names_in_old_cluser()
+ *
+ * If any database, user or role name has newline or carriage return character
+ * in name, then this will report those as these special characters are not
+ * allowed in these names from v18.
+ */
+static void
+check_database_role_names_in_old_cluser(ClusterInfo *cluster)
+{
+ int i;
+ PGconn *conn_template1;
+ PGresult *res;
+ int ntups;
+ FILE *script = NULL;
+ char output_path[MAXPGPATH];
+ int count = 0;
+
+ prep_status("Checking names of databases and roles");
+
+ snprintf(output_path, sizeof(output_path), "%s/%s",
+ log_opts.basedir,
+ "db_role_invalid_names.txt");
+
+ conn_template1 = connectToServer(cluster, "template1");
+
+ /*
+ * Get database, user/role names from cluster. Can't use
+ * pg_authid because only superusers can view it.
+ */
+ res = executeQueryOrDie(conn_template1,
+ "SELECT datname AS objname, 'database' AS objtype "
+ "FROM pg_catalog.pg_database UNION ALL "
+ "SELECT rolname AS objname, 'role' AS objtype "
+ "FROM pg_catalog.pg_roles ORDER BY 2 ");
+
+ ntups = PQntuples(res);
+ for (i = 0; i < ntups; i++)
+ {
+ char *objname = PQgetvalue(res, i, 0);
+ char *objtype = PQgetvalue(res, i, 1);
+
+ /* If name has \n or \r, then report it. */
+ if (strpbrk(objname, "\n\r"))
+ {
+ if (script == NULL && (script = fopen_priv(output_path, "w")) == NULL)
+ pg_fatal("could not open file \"%s\": %m", output_path);
+
+ fprintf(script, "%d : %s name = \"%s\"\n", ++count, objtype, objname);
+ }
+ }
+
+ PQclear(res);
+ PQfinish(conn_template1);
+
+ if (script)
+ {
+ fclose(script);
+ pg_log(PG_REPORT, "fatal");
+ pg_fatal("All the database and role names should have only valid characters. A newline or \n"
+ "carriage return character is not allowed in these object names. To fix this, please \n"
+ "rename these names with valid names. \n"
+ "To see all %d invalid object names, refer db_role_invalid_names.txt file. \n"
+ " %s", count, output_path);
+ }
+ else
+ check_ok();
+}
--
2.47.3
^ permalink raw reply [nested|flat] 3+ messages in thread
* Re: getting "shell command argument contains a newline or carriage return:" error with pg_dumpall when db name have new line in double quote
2026-01-20 06:29 Re: getting "shell command argument contains a newline or carriage return:" error with pg_dumpall when db name have new line in double quote Mahendra Singh Thalor <[email protected]>
@ 2026-01-29 14:37 ` Andrew Dunstan <[email protected]>
0 siblings, 0 replies; 3+ messages in thread
From: Andrew Dunstan @ 2026-01-29 14:37 UTC (permalink / raw)
To: Mahendra Singh Thalor <[email protected]>; Nathan Bossart <[email protected]>; +Cc: Tom Lane <[email protected]>; Álvaro Herrera <[email protected]>; Srinath Reddy <[email protected]>; [email protected]
On 2026-01-20 Tu 1:29 AM, Mahendra Singh Thalor wrote:
> On Tue, 24 Jun 2025 at 11:37, Mahendra Singh Thalor <[email protected]> wrote:
>> On Fri, 11 Apr 2025 at 20:17, Nathan Bossart <[email protected]> wrote:
>>> On Thu, Apr 10, 2025 at 11:58:41PM +0530, Mahendra Singh Thalor wrote:
>>>> As per above discussions, for v18, we will not do any change to server
>>>> side to fix the issue of \n\r in database names. But as a cleanup
>>>> patch, we can give an alert to the user by "pg_upgrade --check". As
>>>> per current code, pg_dump and pg_upgrade will fail with "shell
>>>> command" error but in the attached patch, we will give some extra info
>>>> to the user by "pg_upgrade --check" so that they can fix database
>>>> names before trying to upgrade.
>>>>
>>>> Here, I am attaching a patch which will give a list of invalid
>>>> database names in "pg_upgrade --check". We can consider this as a
>>>> cleanup patch.
>>> Are you proposing this for v18? I think this is all v19 material at this
>>> point. Perhaps we could argue this is a bug fix that should be
>>> back-patched, but IMHO that's a bit of a stretch. I don't sense a
>>> tremendous amount of urgency, either.
>>>
>>> --
>>> nathan
>> Thanks Nathan for the review.
>>
>> I want to re-start this thread for v19. I posted v06* patches in my previous updates[1]. Please someone review it and let me know feedback.
>>
>> v06 patches: v06_patches
>>
>> [1] : https://www.postgresql.org/message-id/CAKYtNAqC5pkjmh8UgvbNLtMyEVeKUtDF3_%2B9dvG9zb8YrhTJQQ%40mail.g...
>>
>> --
>> Thanks and Regards
>> Mahendra Singh Thalor
>> EnterpriseDB: http://www.enterprisedb.com
> Hi,
> Here I am attaching updated patches for the review. Please someone review it.
>
>
These patches need a little copy editing (e.g.
"check_database_role_names_in_old_cluser" seems to be missing a "t") and
the error messages and comments need some tidying, but I think they are
basically sound.
Is there any objection to them in principle?
cheers
andrew
--
Andrew Dunstan
EDB: https://www.enterprisedb.com
^ permalink raw reply [nested|flat] 3+ messages in thread
end of thread, other threads:[~2026-01-29 14:37 UTC | newest]
Thread overview: 3+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2020-09-12 13:07 [PATCH 5/5] Ignore correlation for new BRIN opclasses Tomas Vondra <[email protected]>
2026-01-20 06:29 Re: getting "shell command argument contains a newline or carriage return:" error with pg_dumpall when db name have new line in double quote Mahendra Singh Thalor <[email protected]>
2026-01-29 14:37 ` Re: getting "shell command argument contains a newline or carriage return:" error with pg_dumpall when db name have new line in double quote Andrew Dunstan <[email protected]>
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox