agora inbox for [email protected]
help / color / mirror / Atom feedRe: Statement-level Triggers For Uniqueness Checks
320+ messages / 3 participants
[nested] [flat]
* Re: Statement-level Triggers For Uniqueness Checks
@ 2019-01-04 12:48 Peter Eisentraut <[email protected]>
2019-01-08 22:26 ` Re: Statement-level Triggers For Uniqueness Checks Corey Huinker <[email protected]>
0 siblings, 1 reply; 320+ messages in thread
From: Peter Eisentraut @ 2019-01-04 12:48 UTC (permalink / raw)
To: Corey Huinker <[email protected]>; pgsql-hackers
On 25/12/2018 00:56, Corey Huinker wrote:
> The regression diff (attached) seems to imply that the triggers simply
> are not firing, though.
The reason for this was explained by Dean. If you take out the check
that he mentioned, then your trigger fires but crashes. In your changed
unique_key_recheck(), "slot" is not initialized before use (or ever).
--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
^ permalink raw reply [nested|flat] 320+ messages in thread
* Re: Statement-level Triggers For Uniqueness Checks
2019-01-04 12:48 Re: Statement-level Triggers For Uniqueness Checks Peter Eisentraut <[email protected]>
@ 2019-01-08 22:26 ` Corey Huinker <[email protected]>
2019-01-11 09:22 ` Re: Statement-level Triggers For Uniqueness Checks Peter Eisentraut <[email protected]>
0 siblings, 1 reply; 320+ messages in thread
From: Corey Huinker @ 2019-01-08 22:26 UTC (permalink / raw)
To: Peter Eisentraut <[email protected]>; +Cc: pgsql-hackers
On Fri, Jan 4, 2019 at 7:49 AM Peter Eisentraut
<[email protected]> wrote:
>
> On 25/12/2018 00:56, Corey Huinker wrote:
> > The regression diff (attached) seems to imply that the triggers simply
> > are not firing, though.
>
> The reason for this was explained by Dean. If you take out the check
> that he mentioned, then your trigger fires but crashes. In your changed
> unique_key_recheck(), "slot" is not initialized before use (or ever).
Thanks. I'll be revisiting this shortly. Dean's information made me
think the potential for a gain is smaller than initially imagined.
^ permalink raw reply [nested|flat] 320+ messages in thread
* Re: Statement-level Triggers For Uniqueness Checks
2019-01-04 12:48 Re: Statement-level Triggers For Uniqueness Checks Peter Eisentraut <[email protected]>
2019-01-08 22:26 ` Re: Statement-level Triggers For Uniqueness Checks Corey Huinker <[email protected]>
@ 2019-01-11 09:22 ` Peter Eisentraut <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Peter Eisentraut @ 2019-01-11 09:22 UTC (permalink / raw)
To: Corey Huinker <[email protected]>; +Cc: pgsql-hackers
On 08/01/2019 23:26, Corey Huinker wrote:
> On Fri, Jan 4, 2019 at 7:49 AM Peter Eisentraut
> <[email protected]> wrote:
>>
>> On 25/12/2018 00:56, Corey Huinker wrote:
>>> The regression diff (attached) seems to imply that the triggers simply
>>> are not firing, though.
>>
>> The reason for this was explained by Dean. If you take out the check
>> that he mentioned, then your trigger fires but crashes. In your changed
>> unique_key_recheck(), "slot" is not initialized before use (or ever).
>
> Thanks. I'll be revisiting this shortly. Dean's information made me
> think the potential for a gain is smaller than initially imagined.
I think those are independent considerations. The "recheckIndexes"
logic just tracks what indexes have potential conflicts to check later.
Whether that checking later happens in a row or statement trigger should
not matter. What you need to do is adapt the "recheckIndexes" logic
from row triggers to statement triggers, e.g., expand
ExecASInsertTriggers() to look more like ExecARInsertTriggers().
--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
* [PATCH v7 2/3] Handle default tablespace in AlterTableInternal
@ 2025-08-04 22:05 Erik Wienhold <[email protected]>
0 siblings, 0 replies; 320+ messages in thread
From: Erik Wienhold @ 2025-08-04 22:05 UTC (permalink / raw)
Move handling of default tablespace for CREATE OR REPLACE MATERIALIZED
VIEW from create_ctas_internal to ATPrepSetTableSpace. It feels cleaner
that way in my opinion by not having to resolve the tablespace name just
to pass it to AlterTableInternal. The default table space is passed as
empty string to AlterTableInternal.
---
src/backend/commands/createas.c | 21 ++-------------------
src/backend/commands/tablecmds.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 1620273f965..30ca0a21903 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -24,7 +24,6 @@
*/
#include "postgres.h"
-#include "miscadmin.h"
#include "access/heapam.h"
#include "access/reloptions.h"
#include "access/tableam.h"
@@ -35,7 +34,6 @@
#include "commands/matview.h"
#include "commands/prepare.h"
#include "commands/tablecmds.h"
-#include "commands/tablespace.h"
#include "commands/view.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
@@ -160,23 +158,8 @@ create_ctas_internal(List *attrList, IntoClause *into)
/* tablespace */
atcmd = makeNode(AlterTableCmd);
atcmd->subtype = AT_SetTableSpace;
- if (into->tableSpaceName != NULL)
- atcmd->name = into->tableSpaceName;
- else
- {
- Oid spcid;
-
- /*
- * Resolve the name of the default or database tablespace because
- * we need to specify the tablespace by name.
- *
- * TODO: Move that to ATPrepSetTableSpace? Must allow AlterTableCmd.name to be NULL then.
- */
- spcid = GetDefaultTablespace(RELPERSISTENCE_PERMANENT, false);
- if (!OidIsValid(spcid))
- spcid = MyDatabaseTableSpace;
- atcmd->name = get_tablespace_name(spcid);
- }
+ /* use empty string to specify default tablespace */
+ atcmd->name = into->tableSpaceName ? into->tableSpaceName : "";
atcmds = lappend(atcmds, atcmd);
/* storage options */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44dcd2c5b0d..6ec0b87f841 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16580,8 +16580,18 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, const char *tablespacen
{
Oid tablespaceId;
- /* Check that the tablespace exists */
- tablespaceId = get_tablespace_oid(tablespacename, false);
+ if (tablespacename != NULL && tablespacename[0] == '\0')
+ {
+ /* Use default tablespace if name is empty string */
+ tablespaceId = GetDefaultTablespace(rel->rd_rel->relpersistence, rel->rd_rel->relispartition);
+ if (!OidIsValid(tablespaceId))
+ tablespaceId = MyDatabaseTableSpace;
+ }
+ else
+ {
+ /* Check that the tablespace exists */
+ tablespaceId = get_tablespace_oid(tablespacename, false);
+ }
/* Check permissions except when moving to database's default */
if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
--
2.50.1
--r33ycpluvyfavkwy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename="v7-0003-Add-WITH-OLD-DATA-to-CREATE-OR-REPLACE-MATERIALIZ.patch"
^ permalink raw reply [nested|flat] 320+ messages in thread
end of thread, other threads:[~2025-08-04 22:05 UTC | newest]
Thread overview: 320+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2019-01-04 12:48 Re: Statement-level Triggers For Uniqueness Checks Peter Eisentraut <[email protected]>
2019-01-08 22:26 ` Corey Huinker <[email protected]>
2019-01-11 09:22 ` Peter Eisentraut <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[email protected]>
2025-08-04 22:05 [PATCH v7 2/3] Handle default tablespace in AlterTableInternal Erik Wienhold <[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