Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 20eb273

Browse files
committed
Update dblink extension for parallel query.
Almost all functions provided by this extension are PARALLEL RESTRICTED. Mostly, that's because the leader's TCP connections won't be shared with the workers, but in some cases like dblink_get_pkey it's because they obtain locks which might be released early if taken within a parallel worker. dblink_fdw_validator probably can't be used in a query anyway, but there would be no problem from the point of view of parallel query if it were, so it's PARALLEL SAFE. Andreas Karlsson
1 parent 177c56d commit 20eb273

File tree

4 files changed

+91
-44
lines changed

4 files changed

+91
-44
lines changed

contrib/dblink/Makefile

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ PG_CPPFLAGS = -I$(libpq_srcdir)
66
SHLIB_LINK = $(libpq)
77

88
EXTENSION = dblink
9-
DATA = dblink--1.1.sql dblink--1.0--1.1.sql dblink--unpackaged--1.0.sql
9+
DATA = dblink--1.2.sql dblink--1.1--1.2.sql dblink--1.0--1.1.sql \
10+
dblink--unpackaged--1.0.sql
1011
PGFILEDESC = "dblink - connect to other PostgreSQL databases"
1112

1213
REGRESS = paths dblink

contrib/dblink/dblink--1.1--1.2.sql

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/* contrib/dblink/dblink--1.1--1.2.sql */
2+
3+
-- complain if script is sourced in psql, rather than via ALTER EXTENSION
4+
\echo Use "ALTER EXTENSION dblink UPDATE TO '1.2'" to load this file. \quit
5+
6+
ALTER FUNCTION dblink_connect(text) PARALLEL RESTRICTED;
7+
ALTER FUNCTION dblink_connect(text, text) PARALLEL RESTRICTED;
8+
ALTER FUNCTION dblink_connect_u(text) PARALLEL RESTRICTED;
9+
ALTER FUNCTION dblink_connect_u(text, text) PARALLEL RESTRICTED;
10+
ALTER FUNCTION dblink_disconnect() PARALLEL RESTRICTED;
11+
ALTER FUNCTION dblink_disconnect(text) PARALLEL RESTRICTED;
12+
ALTER FUNCTION dblink_open(text, text) PARALLEL RESTRICTED;
13+
ALTER FUNCTION dblink_open(text, text, boolean) PARALLEL RESTRICTED;
14+
ALTER FUNCTION dblink_open(text, text, text) PARALLEL RESTRICTED;
15+
ALTER FUNCTION dblink_open(text, text, text, boolean) PARALLEL RESTRICTED;
16+
ALTER FUNCTION dblink_fetch(text, int) PARALLEL RESTRICTED;
17+
ALTER FUNCTION dblink_fetch(text, int, boolean) PARALLEL RESTRICTED;
18+
ALTER FUNCTION dblink_fetch(text, text, int) PARALLEL RESTRICTED;
19+
ALTER FUNCTION dblink_fetch(text, text, int, boolean) PARALLEL RESTRICTED;
20+
ALTER FUNCTION dblink_close(text) PARALLEL RESTRICTED;
21+
ALTER FUNCTION dblink_close(text, boolean) PARALLEL RESTRICTED;
22+
ALTER FUNCTION dblink_close(text, text) PARALLEL RESTRICTED;
23+
ALTER FUNCTION dblink_close(text, text, boolean) PARALLEL RESTRICTED;
24+
ALTER FUNCTION dblink(text, text) PARALLEL RESTRICTED;
25+
ALTER FUNCTION dblink(text, text, boolean) PARALLEL RESTRICTED;
26+
ALTER FUNCTION dblink(text) PARALLEL RESTRICTED;
27+
ALTER FUNCTION dblink(text, boolean) PARALLEL RESTRICTED;
28+
ALTER FUNCTION dblink_exec(text, text) PARALLEL RESTRICTED;
29+
ALTER FUNCTION dblink_exec(text, text, boolean) PARALLEL RESTRICTED;
30+
ALTER FUNCTION dblink_exec(text) PARALLEL RESTRICTED;
31+
ALTER FUNCTION dblink_exec(text, boolean) PARALLEL RESTRICTED;
32+
ALTER FUNCTION dblink_get_pkey(text) PARALLEL RESTRICTED;
33+
ALTER FUNCTION dblink_build_sql_insert(text, int2vector, int, _text, _text) PARALLEL SAFE;
34+
ALTER FUNCTION dblink_build_sql_delete(text, int2vector, int, _text) PARALLEL SAFE;
35+
ALTER FUNCTION dblink_build_sql_update(text, int2vector, int, _text, _text) PARALLEL SAFE;
36+
ALTER FUNCTION dblink_current_query() PARALLEL RESTRICTED;
37+
ALTER FUNCTION dblink_send_query(text, text) PARALLEL RESTRICTED;
38+
ALTER FUNCTION dblink_is_busy(text) PARALLEL RESTRICTED;
39+
ALTER FUNCTION dblink_get_result(text) PARALLEL RESTRICTED;
40+
ALTER FUNCTION dblink_get_result(text, bool) PARALLEL RESTRICTED;
41+
ALTER FUNCTION dblink_get_connections() PARALLEL RESTRICTED;
42+
ALTER FUNCTION dblink_cancel_query(text) PARALLEL RESTRICTED;
43+
ALTER FUNCTION dblink_error_message(text) PARALLEL RESTRICTED;
44+
ALTER FUNCTION dblink_get_notify() PARALLEL RESTRICTED;
45+
ALTER FUNCTION dblink_get_notify(text) PARALLEL RESTRICTED;
46+
ALTER FUNCTION dblink_fdw_validator(text[], oid) PARALLEL SAFE;
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* contrib/dblink/dblink--1.1.sql */
1+
/* contrib/dblink/dblink--1.2.sql */
22

33
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
44
\echo Use "CREATE EXTENSION dblink" to load this file. \quit
@@ -8,200 +8,200 @@
88
CREATE FUNCTION dblink_connect (text)
99
RETURNS text
1010
AS 'MODULE_PATHNAME','dblink_connect'
11-
LANGUAGE C STRICT;
11+
LANGUAGE C STRICT PARALLEL RESTRICTED;
1212

1313
CREATE FUNCTION dblink_connect (text, text)
1414
RETURNS text
1515
AS 'MODULE_PATHNAME','dblink_connect'
16-
LANGUAGE C STRICT;
16+
LANGUAGE C STRICT PARALLEL RESTRICTED;
1717

1818
-- dblink_connect_u allows non-superusers to use
1919
-- non-password authenticated connections, but initially
2020
-- privileges are revoked from public
2121
CREATE FUNCTION dblink_connect_u (text)
2222
RETURNS text
2323
AS 'MODULE_PATHNAME','dblink_connect'
24-
LANGUAGE C STRICT SECURITY DEFINER;
24+
LANGUAGE C STRICT PARALLEL RESTRICTED SECURITY DEFINER;
2525

2626
CREATE FUNCTION dblink_connect_u (text, text)
2727
RETURNS text
2828
AS 'MODULE_PATHNAME','dblink_connect'
29-
LANGUAGE C STRICT SECURITY DEFINER;
29+
LANGUAGE C STRICT PARALLEL RESTRICTED SECURITY DEFINER;
3030

3131
REVOKE ALL ON FUNCTION dblink_connect_u (text) FROM public;
3232
REVOKE ALL ON FUNCTION dblink_connect_u (text, text) FROM public;
3333

3434
CREATE FUNCTION dblink_disconnect ()
3535
RETURNS text
3636
AS 'MODULE_PATHNAME','dblink_disconnect'
37-
LANGUAGE C STRICT;
37+
LANGUAGE C STRICT PARALLEL RESTRICTED;
3838

3939
CREATE FUNCTION dblink_disconnect (text)
4040
RETURNS text
4141
AS 'MODULE_PATHNAME','dblink_disconnect'
42-
LANGUAGE C STRICT;
42+
LANGUAGE C STRICT PARALLEL RESTRICTED;
4343

4444
CREATE FUNCTION dblink_open (text, text)
4545
RETURNS text
4646
AS 'MODULE_PATHNAME','dblink_open'
47-
LANGUAGE C STRICT;
47+
LANGUAGE C STRICT PARALLEL RESTRICTED;
4848

4949
CREATE FUNCTION dblink_open (text, text, boolean)
5050
RETURNS text
5151
AS 'MODULE_PATHNAME','dblink_open'
52-
LANGUAGE C STRICT;
52+
LANGUAGE C STRICT PARALLEL RESTRICTED;
5353

5454
CREATE FUNCTION dblink_open (text, text, text)
5555
RETURNS text
5656
AS 'MODULE_PATHNAME','dblink_open'
57-
LANGUAGE C STRICT;
57+
LANGUAGE C STRICT PARALLEL RESTRICTED;
5858

5959
CREATE FUNCTION dblink_open (text, text, text, boolean)
6060
RETURNS text
6161
AS 'MODULE_PATHNAME','dblink_open'
62-
LANGUAGE C STRICT;
62+
LANGUAGE C STRICT PARALLEL RESTRICTED;
6363

6464
CREATE FUNCTION dblink_fetch (text, int)
6565
RETURNS setof record
6666
AS 'MODULE_PATHNAME','dblink_fetch'
67-
LANGUAGE C STRICT;
67+
LANGUAGE C STRICT PARALLEL RESTRICTED;
6868

6969
CREATE FUNCTION dblink_fetch (text, int, boolean)
7070
RETURNS setof record
7171
AS 'MODULE_PATHNAME','dblink_fetch'
72-
LANGUAGE C STRICT;
72+
LANGUAGE C STRICT PARALLEL RESTRICTED;
7373

7474
CREATE FUNCTION dblink_fetch (text, text, int)
7575
RETURNS setof record
7676
AS 'MODULE_PATHNAME','dblink_fetch'
77-
LANGUAGE C STRICT;
77+
LANGUAGE C STRICT PARALLEL RESTRICTED;
7878

7979
CREATE FUNCTION dblink_fetch (text, text, int, boolean)
8080
RETURNS setof record
8181
AS 'MODULE_PATHNAME','dblink_fetch'
82-
LANGUAGE C STRICT;
82+
LANGUAGE C STRICT PARALLEL RESTRICTED;
8383

8484
CREATE FUNCTION dblink_close (text)
8585
RETURNS text
8686
AS 'MODULE_PATHNAME','dblink_close'
87-
LANGUAGE C STRICT;
87+
LANGUAGE C STRICT PARALLEL RESTRICTED;
8888

8989
CREATE FUNCTION dblink_close (text, boolean)
9090
RETURNS text
9191
AS 'MODULE_PATHNAME','dblink_close'
92-
LANGUAGE C STRICT;
92+
LANGUAGE C STRICT PARALLEL RESTRICTED;
9393

9494
CREATE FUNCTION dblink_close (text, text)
9595
RETURNS text
9696
AS 'MODULE_PATHNAME','dblink_close'
97-
LANGUAGE C STRICT;
97+
LANGUAGE C STRICT PARALLEL RESTRICTED;
9898

9999
CREATE FUNCTION dblink_close (text, text, boolean)
100100
RETURNS text
101101
AS 'MODULE_PATHNAME','dblink_close'
102-
LANGUAGE C STRICT;
102+
LANGUAGE C STRICT PARALLEL RESTRICTED;
103103

104104
CREATE FUNCTION dblink (text, text)
105105
RETURNS setof record
106106
AS 'MODULE_PATHNAME','dblink_record'
107-
LANGUAGE C STRICT;
107+
LANGUAGE C STRICT PARALLEL RESTRICTED;
108108

109109
CREATE FUNCTION dblink (text, text, boolean)
110110
RETURNS setof record
111111
AS 'MODULE_PATHNAME','dblink_record'
112-
LANGUAGE C STRICT;
112+
LANGUAGE C STRICT PARALLEL RESTRICTED;
113113

114114
CREATE FUNCTION dblink (text)
115115
RETURNS setof record
116116
AS 'MODULE_PATHNAME','dblink_record'
117-
LANGUAGE C STRICT;
117+
LANGUAGE C STRICT PARALLEL RESTRICTED;
118118

119119
CREATE FUNCTION dblink (text, boolean)
120120
RETURNS setof record
121121
AS 'MODULE_PATHNAME','dblink_record'
122-
LANGUAGE C STRICT;
122+
LANGUAGE C STRICT PARALLEL RESTRICTED;
123123

124124
CREATE FUNCTION dblink_exec (text, text)
125125
RETURNS text
126126
AS 'MODULE_PATHNAME','dblink_exec'
127-
LANGUAGE C STRICT;
127+
LANGUAGE C STRICT PARALLEL RESTRICTED;
128128

129129
CREATE FUNCTION dblink_exec (text, text, boolean)
130130
RETURNS text
131131
AS 'MODULE_PATHNAME','dblink_exec'
132-
LANGUAGE C STRICT;
132+
LANGUAGE C STRICT PARALLEL RESTRICTED;
133133

134134
CREATE FUNCTION dblink_exec (text)
135135
RETURNS text
136136
AS 'MODULE_PATHNAME','dblink_exec'
137-
LANGUAGE C STRICT;
137+
LANGUAGE C STRICT PARALLEL RESTRICTED;
138138

139139
CREATE FUNCTION dblink_exec (text,boolean)
140140
RETURNS text
141141
AS 'MODULE_PATHNAME','dblink_exec'
142-
LANGUAGE C STRICT;
142+
LANGUAGE C STRICT PARALLEL RESTRICTED;
143143

144144
CREATE TYPE dblink_pkey_results AS (position int, colname text);
145145

146146
CREATE FUNCTION dblink_get_pkey (text)
147147
RETURNS setof dblink_pkey_results
148148
AS 'MODULE_PATHNAME','dblink_get_pkey'
149-
LANGUAGE C STRICT;
149+
LANGUAGE C STRICT PARALLEL RESTRICTED;
150150

151151
CREATE FUNCTION dblink_build_sql_insert (text, int2vector, int, _text, _text)
152152
RETURNS text
153153
AS 'MODULE_PATHNAME','dblink_build_sql_insert'
154-
LANGUAGE C STRICT;
154+
LANGUAGE C STRICT PARALLEL SAFE;
155155

156156
CREATE FUNCTION dblink_build_sql_delete (text, int2vector, int, _text)
157157
RETURNS text
158158
AS 'MODULE_PATHNAME','dblink_build_sql_delete'
159-
LANGUAGE C STRICT;
159+
LANGUAGE C STRICT PARALLEL SAFE;
160160

161161
CREATE FUNCTION dblink_build_sql_update (text, int2vector, int, _text, _text)
162162
RETURNS text
163163
AS 'MODULE_PATHNAME','dblink_build_sql_update'
164-
LANGUAGE C STRICT;
164+
LANGUAGE C STRICT PARALLEL SAFE;
165165

166166
CREATE FUNCTION dblink_current_query ()
167167
RETURNS text
168168
AS 'MODULE_PATHNAME','dblink_current_query'
169-
LANGUAGE C;
169+
LANGUAGE C PARALLEL RESTRICTED;
170170

171171
CREATE FUNCTION dblink_send_query(text, text)
172172
RETURNS int4
173173
AS 'MODULE_PATHNAME', 'dblink_send_query'
174-
LANGUAGE C STRICT;
174+
LANGUAGE C STRICT PARALLEL RESTRICTED;
175175

176176
CREATE FUNCTION dblink_is_busy(text)
177177
RETURNS int4
178178
AS 'MODULE_PATHNAME', 'dblink_is_busy'
179-
LANGUAGE C STRICT;
179+
LANGUAGE C STRICT PARALLEL RESTRICTED;
180180

181181
CREATE FUNCTION dblink_get_result(text)
182182
RETURNS SETOF record
183183
AS 'MODULE_PATHNAME', 'dblink_get_result'
184-
LANGUAGE C STRICT;
184+
LANGUAGE C STRICT PARALLEL RESTRICTED;
185185

186186
CREATE FUNCTION dblink_get_result(text, bool)
187187
RETURNS SETOF record
188188
AS 'MODULE_PATHNAME', 'dblink_get_result'
189-
LANGUAGE C STRICT;
189+
LANGUAGE C STRICT PARALLEL RESTRICTED;
190190

191191
CREATE FUNCTION dblink_get_connections()
192192
RETURNS text[]
193193
AS 'MODULE_PATHNAME', 'dblink_get_connections'
194-
LANGUAGE C;
194+
LANGUAGE C PARALLEL RESTRICTED;
195195

196196
CREATE FUNCTION dblink_cancel_query(text)
197197
RETURNS text
198198
AS 'MODULE_PATHNAME', 'dblink_cancel_query'
199-
LANGUAGE C STRICT;
199+
LANGUAGE C STRICT PARALLEL RESTRICTED;
200200

201201
CREATE FUNCTION dblink_error_message(text)
202202
RETURNS text
203203
AS 'MODULE_PATHNAME', 'dblink_error_message'
204-
LANGUAGE C STRICT;
204+
LANGUAGE C STRICT PARALLEL RESTRICTED;
205205

206206
CREATE FUNCTION dblink_get_notify(
207207
OUT notify_name TEXT,
@@ -210,7 +210,7 @@ CREATE FUNCTION dblink_get_notify(
210210
)
211211
RETURNS setof record
212212
AS 'MODULE_PATHNAME', 'dblink_get_notify'
213-
LANGUAGE C STRICT;
213+
LANGUAGE C STRICT PARALLEL RESTRICTED;
214214

215215
CREATE FUNCTION dblink_get_notify(
216216
conname TEXT,
@@ -220,7 +220,7 @@ CREATE FUNCTION dblink_get_notify(
220220
)
221221
RETURNS setof record
222222
AS 'MODULE_PATHNAME', 'dblink_get_notify'
223-
LANGUAGE C STRICT;
223+
LANGUAGE C STRICT PARALLEL RESTRICTED;
224224

225225
/* New stuff in 1.1 begins here */
226226

@@ -230,6 +230,6 @@ CREATE FUNCTION dblink_fdw_validator(
230230
)
231231
RETURNS void
232232
AS 'MODULE_PATHNAME', 'dblink_fdw_validator'
233-
LANGUAGE C STRICT;
233+
LANGUAGE C STRICT PARALLEL SAFE;
234234

235235
CREATE FOREIGN DATA WRAPPER dblink_fdw VALIDATOR dblink_fdw_validator;

contrib/dblink/dblink.control

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# dblink extension
22
comment = 'connect to other PostgreSQL databases from within a database'
3-
default_version = '1.1'
3+
default_version = '1.2'
44
module_pathname = '$libdir/dblink'
55
relocatable = true

0 commit comments

Comments
 (0)