Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5bcf8ed

Browse files
committed
Add ALTER FOREIGN DATA WRAPPER / RENAME and ALTER SERVER / RENAME
1 parent9f0d2bd commit5bcf8ed

File tree

8 files changed

+183
-1
lines changed

8 files changed

+183
-1
lines changed

‎doc/src/sgml/ref/alter_foreign_data_wrapper.sgml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ ALTER FOREIGN DATA WRAPPER <replaceable class="parameter">name</replaceable>
2626
[ VALIDATOR <replaceable class="parameter">validator_function</replaceable> | NO VALIDATOR ]
2727
[ OPTIONS ( [ ADD | SET | DROP ] <replaceable class="PARAMETER">option</replaceable> ['<replaceable class="PARAMETER">value</replaceable>'] [, ... ]) ]
2828
ALTER FOREIGN DATA WRAPPER <replaceable class="parameter">name</replaceable> OWNER TO <replaceable>new_owner</replaceable>
29+
ALTER FOREIGN DATA WRAPPER <replaceable class="parameter">name</replaceable> RENAME TO <replaceable>new_name</replaceable>
2930
</synopsis>
3031
</refsynopsisdiv>
3132

@@ -122,6 +123,24 @@ ALTER FOREIGN DATA WRAPPER <replaceable class="parameter">name</replaceable> OWN
122123
</para>
123124
</listitem>
124125
</varlistentry>
126+
127+
<varlistentry>
128+
<term><replaceable class="PARAMETER">new_owner</replaceable></term>
129+
<listitem>
130+
<para>
131+
The user name of the new owner of the foreign-data wrapper.
132+
</para>
133+
</listitem>
134+
</varlistentry>
135+
136+
<varlistentry>
137+
<term><replaceable class="parameter">new_name</replaceable></term>
138+
<listitem>
139+
<para>
140+
The new name for the foreign-data wrapper.
141+
</para>
142+
</listitem>
143+
</varlistentry>
125144
</variablelist>
126145
</refsect1>
127146

@@ -150,7 +169,8 @@ ALTER FOREIGN DATA WRAPPER dbi VALIDATOR bob.myvalidator;
150169
<para>
151170
<command>ALTER FOREIGN DATA WRAPPER</command> conforms to ISO/IEC
152171
9075-9 (SQL/MED), except that the <literal>HANDLER</literal>,
153-
<literal>VALIDATOR</> and <literal>OWNER TO</> clauses are extensions.
172+
<literal>VALIDATOR</>, <literal>OWNER TO</>, and <literal>RENAME</literal>
173+
clauses are extensions.
154174
</para>
155175
</refsect1>
156176

‎doc/src/sgml/ref/alter_server.sgml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ PostgreSQL documentation
2424
ALTER SERVER <replaceable class="parameter">server_name</replaceable> [ VERSION '<replaceable class="parameter">new_version</replaceable>' ]
2525
[ OPTIONS ( [ ADD | SET | DROP ] <replaceable class="PARAMETER">option</replaceable> ['<replaceable class="PARAMETER">value</replaceable>'] [, ... ] ) ]
2626
ALTER SERVER <replaceable class="PARAMETER">server_name</replaceable> OWNER TO <replaceable>new_owner</replaceable>
27+
ALTER SERVER <replaceable class="PARAMETER">server_name</replaceable> RENAME TO <replaceable>new_name</replaceable>
2728
</synopsis>
2829
</refsynopsisdiv>
2930

@@ -82,6 +83,24 @@ ALTER SERVER <replaceable class="PARAMETER">server_name</replaceable> OWNER TO <
8283
</para>
8384
</listitem>
8485
</varlistentry>
86+
87+
<varlistentry>
88+
<term><replaceable class="PARAMETER">new_owner</replaceable></term>
89+
<listitem>
90+
<para>
91+
The user name of the new owner of the foreign server.
92+
</para>
93+
</listitem>
94+
</varlistentry>
95+
96+
<varlistentry>
97+
<term><replaceable class="parameter">new_name</replaceable></term>
98+
<listitem>
99+
<para>
100+
The new name for the foreign server.
101+
</para>
102+
</listitem>
103+
</varlistentry>
85104
</variablelist>
86105
</refsect1>
87106

@@ -108,6 +127,8 @@ ALTER SERVER foo VERSION '8.4' OPTIONS (SET host 'baz');
108127

109128
<para>
110129
<command>ALTER SERVER</command> conforms to ISO/IEC 9075-9 (SQL/MED).
130+
The <literal>OWNER TO</literal> and <literal>RENAME</literal> forms are
131+
PostgreSQL extensions.
111132
</para>
112133
</refsect1>
113134

‎src/backend/commands/alter.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,14 @@ ExecRenameStmt(RenameStmt *stmt)
6565
RenameDatabase(stmt->subname,stmt->newname);
6666
break;
6767

68+
caseOBJECT_FDW:
69+
RenameForeignDataWrapper(stmt->subname,stmt->newname);
70+
break;
71+
72+
caseOBJECT_FOREIGN_SERVER:
73+
RenameForeignServer(stmt->subname,stmt->newname);
74+
break;
75+
6876
caseOBJECT_FUNCTION:
6977
RenameFunction(stmt->object,stmt->objarg,stmt->newname);
7078
break;

‎src/backend/commands/foreigncmds.c

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,82 @@ GetUserOidFromMapping(const char *username, bool missing_ok)
200200
}
201201

202202

203+
/*
204+
* Rename foreign-data wrapper
205+
*/
206+
void
207+
RenameForeignDataWrapper(constchar*oldname,constchar*newname)
208+
{
209+
HeapTupletup;
210+
Relationrel;
211+
212+
rel=heap_open(ForeignDataWrapperRelationId,RowExclusiveLock);
213+
214+
tup=SearchSysCacheCopy1(FOREIGNDATAWRAPPERNAME,CStringGetDatum(oldname));
215+
if (!HeapTupleIsValid(tup))
216+
ereport(ERROR,
217+
(errcode(ERRCODE_UNDEFINED_OBJECT),
218+
errmsg("foreign-data wrapper \"%s\" does not exist",oldname)));
219+
220+
/* make sure the new name doesn't exist */
221+
if (SearchSysCacheExists1(FOREIGNDATAWRAPPERNAME,CStringGetDatum(newname)))
222+
ereport(ERROR,
223+
(errcode(ERRCODE_DUPLICATE_OBJECT),
224+
errmsg("foreign-data wrapper \"%s\" already exists",newname)));
225+
226+
/* must be owner of FDW */
227+
if (!pg_foreign_data_wrapper_ownercheck(HeapTupleGetOid(tup),GetUserId()))
228+
aclcheck_error(ACLCHECK_NOT_OWNER,ACL_KIND_FDW,
229+
oldname);
230+
231+
/* rename */
232+
namestrcpy(&(((Form_pg_foreign_data_wrapper)GETSTRUCT(tup))->fdwname),newname);
233+
simple_heap_update(rel,&tup->t_self,tup);
234+
CatalogUpdateIndexes(rel,tup);
235+
236+
heap_close(rel,NoLock);
237+
heap_freetuple(tup);
238+
}
239+
240+
241+
/*
242+
* Rename foreign server
243+
*/
244+
void
245+
RenameForeignServer(constchar*oldname,constchar*newname)
246+
{
247+
HeapTupletup;
248+
Relationrel;
249+
250+
rel=heap_open(ForeignServerRelationId,RowExclusiveLock);
251+
252+
tup=SearchSysCacheCopy1(FOREIGNSERVERNAME,CStringGetDatum(oldname));
253+
if (!HeapTupleIsValid(tup))
254+
ereport(ERROR,
255+
(errcode(ERRCODE_UNDEFINED_OBJECT),
256+
errmsg("server \"%s\" does not exist",oldname)));
257+
258+
/* make sure the new name doesn't exist */
259+
if (SearchSysCacheExists1(FOREIGNSERVERNAME,CStringGetDatum(newname)))
260+
ereport(ERROR,
261+
(errcode(ERRCODE_DUPLICATE_OBJECT),
262+
errmsg("server \"%s\" already exists",newname)));
263+
264+
/* must be owner of server */
265+
if (!pg_foreign_server_ownercheck(HeapTupleGetOid(tup),GetUserId()))
266+
aclcheck_error(ACLCHECK_NOT_OWNER,ACL_KIND_FOREIGN_SERVER,
267+
oldname);
268+
269+
/* rename */
270+
namestrcpy(&(((Form_pg_foreign_server)GETSTRUCT(tup))->srvname),newname);
271+
simple_heap_update(rel,&tup->t_self,tup);
272+
CatalogUpdateIndexes(rel,tup);
273+
274+
heap_close(rel,NoLock);
275+
heap_freetuple(tup);
276+
}
277+
278+
203279
/*
204280
* Change foreign-data wrapper owner.
205281
*

‎src/backend/parser/gram.y

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6434,6 +6434,14 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name
64346434
n->newname =$6;
64356435
$$ = (Node *)n;
64366436
}
6437+
|ALTERFOREIGNDATA_PWRAPPERnameRENAMETOname
6438+
{
6439+
RenameStmt *n = makeNode(RenameStmt);
6440+
n->renameType = OBJECT_FDW;
6441+
n->subname =$5;
6442+
n->newname =$8;
6443+
$$ = (Node *)n;
6444+
}
64376445
|ALTERFUNCTIONfunction_with_argtypesRENAMETOname
64386446
{
64396447
RenameStmt *n = makeNode(RenameStmt);
@@ -6485,6 +6493,14 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name
64856493
n->newname =$6;
64866494
$$ = (Node *)n;
64876495
}
6496+
|ALTERSERVERnameRENAMETOname
6497+
{
6498+
RenameStmt *n = makeNode(RenameStmt);
6499+
n->renameType = OBJECT_FOREIGN_SERVER;
6500+
n->subname =$3;
6501+
n->newname =$6;
6502+
$$ = (Node *)n;
6503+
}
64886504
|ALTERTABLErelation_exprRENAMETOname
64896505
{
64906506
RenameStmt *n = makeNode(RenameStmt);

‎src/include/commands/defrem.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,8 @@ extern text *serialize_deflist(List *deflist);
146146
externList*deserialize_deflist(Datumtxt);
147147

148148
/* commands/foreigncmds.c */
149+
externvoidRenameForeignServer(constchar*oldname,constchar*newname);
150+
externvoidRenameForeignDataWrapper(constchar*oldname,constchar*newname);
149151
externvoidAlterForeignServerOwner(constchar*name,OidnewOwnerId);
150152
externvoidAlterForeignDataWrapperOwner(constchar*name,OidnewOwnerId);
151153
externvoidCreateForeignDataWrapper(CreateFdwStmt*stmt);

‎src/test/regress/expected/foreign_data.out

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,17 @@ RESET ROLE;
177177
postgresql | foreign_data_user | - | postgresql_fdw_validator | | |
178178
(3 rows)
179179

180+
ALTER FOREIGN DATA WRAPPER foo RENAME TO foo1;
181+
\dew+
182+
List of foreign-data wrappers
183+
Name | Owner | Handler | Validator | Access privileges | FDW Options | Description
184+
------------+-------------------------+---------+--------------------------+-------------------+------------------------------+-------------
185+
dummy | foreign_data_user | - | - | | | useless
186+
foo1 | regress_test_role_super | - | - | | (b '3', c '4', a '2', d '5') |
187+
postgresql | foreign_data_user | - | postgresql_fdw_validator | | |
188+
(3 rows)
189+
190+
ALTER FOREIGN DATA WRAPPER foo1 RENAME TO foo;
180191
-- DROP FOREIGN DATA WRAPPER
181192
DROP FOREIGN DATA WRAPPER nonexistent; -- ERROR
182193
ERROR: foreign-data wrapper "nonexistent" does not exist
@@ -427,6 +438,26 @@ privileges for foreign-data wrapper foo
427438
t2 | regress_test_role | foo | | | | |
428439
(10 rows)
429440

441+
ALTER SERVER s8 RENAME to s8new;
442+
\des+
443+
List of foreign servers
444+
Name | Owner | Foreign-data wrapper | Access privileges | Type | Version | FDW Options | Description
445+
-------+-----------------------+----------------------+-----------------------------------------+--------+---------+--------------------------------------+-------------
446+
s1 | regress_test_indirect | foo | foreign_data_user=U/foreign_data_user +| | 1.1 | (servername 's1') |
447+
| | | regress_test_role=U/foreign_data_user | | | |
448+
s2 | foreign_data_user | foo | | | 1.1 | (host 'a', dbname 'b') |
449+
s3 | foreign_data_user | foo | | oracle | | ("tns name" 'orcl', port '1521') |
450+
s4 | foreign_data_user | foo | | oracle | | (host 'a', dbname 'b') |
451+
s5 | foreign_data_user | foo | | | 15.0 | |
452+
s6 | foreign_data_user | foo | foreign_data_user=U/foreign_data_user +| | 16.0 | (host 'a', dbname 'b') |
453+
| | | regress_test_role2=U*/foreign_data_user | | | |
454+
s7 | foreign_data_user | foo | | oracle | 17.0 | (host 'a', dbname 'b') |
455+
s8new | foreign_data_user | postgresql | | | | (dbname 'db1', connect_timeout '30') |
456+
t1 | regress_test_role | foo | | | | |
457+
t2 | regress_test_role | foo | | | | |
458+
(10 rows)
459+
460+
ALTER SERVER s8new RENAME to s8;
430461
-- DROP SERVER
431462
DROP SERVER nonexistent; -- ERROR
432463
ERROR: server "nonexistent" does not exist

‎src/test/regress/sql/foreign_data.sql

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,10 @@ ALTER FOREIGN DATA WRAPPER foo OPTIONS (ADD e '6'); -- ERROR
8484
RESET ROLE;
8585
\dew+
8686

87+
ALTER FOREIGN DATA WRAPPER foo RENAME TO foo1;
88+
\dew+
89+
ALTER FOREIGN DATA WRAPPER foo1 RENAME TO foo;
90+
8791
-- DROP FOREIGN DATA WRAPPER
8892
DROP FOREIGN DATA WRAPPER nonexistent;-- ERROR
8993
DROP FOREIGN DATA WRAPPER IF EXISTS nonexistent;
@@ -181,6 +185,10 @@ RESET ROLE;
181185
DROP ROLE regress_test_indirect;-- ERROR
182186
\des+
183187

188+
ALTER SERVER s8 RENAME to s8new;
189+
\des+
190+
ALTER SERVER s8new RENAME to s8;
191+
184192
-- DROP SERVER
185193
DROP SERVER nonexistent;-- ERROR
186194
DROP SERVER IF EXISTS nonexistent;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp