@@ -134,36 +134,6 @@ CREATE OR REPLACE FUNCTION @extschema@.pathman_range_out(PathmanRange)
134
134
AS ' pg_pathman'
135
135
LANGUAGE C IMMUTABLE STRICT;
136
136
137
- /*
138
- CREATE OR REPLACE FUNCTION @extschema@.get_whole_range(relid OID)
139
- RETURNS PathmanRange
140
- AS 'pg_pathman'
141
- LANGUAGE C STRICT;
142
-
143
- CREATE OR REPLACE FUNCTION @extschema@.range_value_cmp(range PathmanRange, value ANYELEMENT)
144
- RETURNS INTEGER
145
- AS 'pg_pathman'
146
- LANGUAGE C STRICT;
147
-
148
- CREATE OR REPLACE FUNCTION @extschema@.range_lower(range PathmanRange, dummy ANYELEMENT)
149
- RETURNS ANYELEMENT
150
- AS 'pg_pathman'
151
- LANGUAGE C;
152
-
153
- CREATE OR REPLACE FUNCTION @extschema@.range_upper(range PathmanRange, dummy ANYELEMENT)
154
- RETURNS ANYELEMENT
155
- AS 'pg_pathman'
156
- LANGUAGE C;
157
-
158
- CREATE OR REPLACE FUNCTION @extschema@.range_oid(range PathmanRange)
159
- RETURNS OID
160
- AS 'pg_pathman'
161
- LANGUAGE C STRICT;
162
-
163
- CREATE OR REPLACE FUNCTION @extschema@.range_partitions_list(parent_relid OID)
164
- RETURNS SETOF PATHMANRANGE AS 'pg_pathman'
165
- LANGUAGE C STRICT;
166
- */
167
137
CREATE TYPE @extschema@.PathmanRange (
168
138
internallength= 32 ,
169
139
input= pathman_range_in,
@@ -185,12 +155,11 @@ DECLARE
185
155
v_attrTEXT ;
186
156
v_limit_clauseTEXT := ' ' ;
187
157
v_where_clauseTEXT := ' ' ;
158
+ ctids TID[];
188
159
BEGIN
189
160
SELECT attname INTO v_attr
190
161
FROM @extschema@.pathman_configWHERE partrel= p_relation;
191
162
192
- PERFORM @extschema@.debug_capture();
193
-
194
163
p_total := 0 ;
195
164
196
165
/* Format LIMIT clause if needed*/
@@ -216,14 +185,17 @@ BEGIN
216
185
217
186
/* Lock rows and copy data*/
218
187
RAISE NOTICE' Copying data to partitions...' ;
188
+ EXECUTE format(' SELECT array(SELECT ctid FROM ONLY %1$s %2$s %3$s FOR UPDATE NOWAIT)' ,
189
+ p_relation, v_where_clause, v_limit_clause)
190
+ USING p_min, p_max
191
+ INTO ctids;
192
+
219
193
EXECUTE format('
220
194
WITH data AS (
221
- DELETE FROM ONLY %1$s WHERE ctid IN (
222
- SELECT ctid FROM ONLY %1$s %2$s %3$s FOR UPDATE NOWAIT
223
- ) RETURNING *)
224
- INSERT INTO %1$s SELECT * FROM data'
225
- , p_relation, v_where_clause, v_limit_clause)
226
- USING p_min, p_max;
195
+ DELETE FROM ONLY %1$s WHERE ctid = ANY($1) RETURNING *)
196
+ INSERT INTO %1$s SELECT * FROM data' ,
197
+ p_relation)
198
+ USING ctids;
227
199
228
200
GET DIAGNOSTICS p_total= ROW_COUNT;
229
201
RETURN;