@@ -140,95 +140,95 @@ CREATE TYPE @extschema@.PathmanRange (
140140output= pathman_range_out
141141);
142142
143- /*
144- * Copy rows to partitions
145- */
146- -- CREATE OR REPLACE FUNCTION @extschema@.partition_data(
147- -- p_relation regclass
148- -- , p_min ANYELEMENT DEFAULT NULL::text
149- -- , p_max ANYELEMENT DEFAULT NULL::text
150- -- , p_limit INT DEFAULT NULL
151- -- , OUT p_total BIGINT)
152- -- AS
153- -- $$
154- -- DECLARE
155- -- v_attr TEXT;
156- -- v_limit_clause TEXT := '';
157- -- v_where_clause TEXT := '';
158- -- BEGIN
159- -- SELECT attname INTO v_attr
160- -- FROM @extschema@.pathman_config WHERE partrel = p_relation;
161-
162- -- PERFORM @extschema@.debug_capture();
163-
164- -- p_total := 0;
165-
166- -- /* Format LIMIT clause if needed */
167- -- IF NOT p_limit IS NULL THEN
168- -- v_limit_clause := format('LIMIT %s', p_limit);
169- -- END IF;
170-
171- -- /* Format WHERE clause if needed */
172- -- IF NOT p_min IS NULL THEN
173- -- v_where_clause := format('%1$s >= $1', v_attr);
174- -- END IF;
175-
176- -- IF NOT p_max IS NULL THEN
177- -- IF NOT p_min IS NULL THEN
178- -- v_where_clause := v_where_clause || ' AND ';
179- -- END IF;
180- -- v_where_clause := v_where_clause || format('%1$s < $2', v_attr);
181- -- END IF;
182-
183- -- IF v_where_clause != '' THEN
184- -- v_where_clause := 'WHERE ' || v_where_clause;
185- -- END IF;
186-
187- -- /* Lock rows and copy data */
188- -- RAISE NOTICE 'Copying data to partitions...';
189- -- EXECUTE format('
190- -- WITH data AS (
191- -- DELETE FROM ONLY %1$s WHERE ctid IN (
192- -- SELECT ctid FROM ONLY %1$s %2$s %3$s FOR UPDATE NOWAIT
193- -- ) RETURNING *)
194- -- INSERT INTO %1$s SELECT * FROM data'
195- -- , p_relation, v_where_clause, v_limit_clause)
196- -- USING p_min, p_max;
197-
198- -- GET DIAGNOSTICS p_total = ROW_COUNT;
199- -- RETURN;
200- -- END
201- -- $$
202- -- LANGUAGE plpgsql;
203-
204143/*
205144 * Copy rows to partitions
206145*/
207146CREATEOR REPLACE FUNCTION @extschema@.partition_data(
208- parent_relidREGCLASS,
209- OUT p_totalBIGINT )
147+ p_relation regclass
148+ , p_min ANYELEMENT DEFAULTNULL ::text
149+ , p_max ANYELEMENT DEFAULTNULL ::text
150+ , p_limitINT DEFAULTNULL
151+ , OUT p_totalBIGINT )
210152AS
211153$$
212154DECLARE
213- relnameTEXT ;
214- recRECORD;
215- cntBIGINT := 0 ;
216-
155+ v_attrTEXT ;
156+ v_limit_clauseTEXT := ' ' ;
157+ v_where_clauseTEXT := ' ' ;
217158BEGIN
218- p_total := 0 ;
219-
220- /* Create partitions and copy rest of the data*/
221- EXECUTE format(' WITH part_data AS (DELETE FROM ONLY %1$s RETURNING *)
222- INSERT INTO %1$s SELECT * FROM part_data' ,
223- @extschema@.get_schema_qualified_name(parent_relid));
224-
225- /* Get number of inserted rows*/
226- GET DIAGNOSTICS p_total= ROW_COUNT;
227- RETURN;
159+ SELECT attname INTO v_attr
160+ FROM @extschema@.pathman_configWHERE partrel= p_relation;
161+
162+ PERFORM @extschema@.debug_capture();
163+
164+ p_total := 0 ;
165+
166+ /* Format LIMIT clause if needed*/
167+ IF NOT p_limit ISNULL THEN
168+ v_limit_clause := format(' LIMIT %s' , p_limit);
169+ END IF;
170+
171+ /* Format WHERE clause if needed*/
172+ IF NOT p_min ISNULL THEN
173+ v_where_clause := format(' %1$s >= $1' , v_attr);
174+ END IF;
175+
176+ IF NOT p_max ISNULL THEN
177+ IF NOT p_min ISNULL THEN
178+ v_where_clause := v_where_clause|| ' AND' ;
179+ END IF;
180+ v_where_clause := v_where_clause|| format(' %1$s < $2' , v_attr);
181+ END IF;
182+
183+ IF v_where_clause!= ' ' THEN
184+ v_where_clause := ' WHERE' || v_where_clause;
185+ END IF;
186+
187+ /* Lock rows and copy data*/
188+ RAISE NOTICE' Copying data to partitions...' ;
189+ EXECUTE format('
190+ WITH data AS (
191+ DELETE FROM ONLY %1$s WHERE ctid IN (
192+ SELECT ctid FROM ONLY %1$s %2$s %3$s FOR UPDATE NOWAIT
193+ ) RETURNING *)
194+ INSERT INTO %1$s SELECT * FROM data'
195+ , p_relation, v_where_clause, v_limit_clause)
196+ USING p_min, p_max;
197+
198+ GET DIAGNOSTICS p_total= ROW_COUNT;
199+ RETURN;
228200END
229201$$
230202LANGUAGE plpgsql;
231203
204+ /*
205+ * Copy rows to partitions
206+ */
207+ -- CREATE OR REPLACE FUNCTION @extschema@.partition_data(
208+ -- parent_relidREGCLASS,
209+ -- OUT p_totalBIGINT)
210+ -- AS
211+ -- $$
212+ -- DECLARE
213+ -- relnameTEXT;
214+ -- recRECORD;
215+ -- cntBIGINT := 0;
216+
217+ -- BEGIN
218+ -- p_total := 0;
219+
220+ -- /* Create partitions and copy rest of the data */
221+ -- EXECUTE format('WITH part_data AS (DELETE FROM ONLY %1$s RETURNING *)
222+ -- INSERT INTO %1$s SELECT * FROM part_data',
223+ -- @extschema@.get_schema_qualified_name(parent_relid));
224+
225+ -- /* Get number of inserted rows */
226+ -- GET DIAGNOSTICS p_total = ROW_COUNT;
227+ -- RETURN;
228+ -- END
229+ -- $$
230+ -- LANGUAGE plpgsql;
231+
232232/*
233233 * Disable pathman partitioning for specified relation
234234*/