Example: ORDER BY pushdown v2

This example shows ORDER BY pushdown on foreign table: sales_records.

Table on MySQL server:

CREATE TABLE sales_records(
warehouse_id      INT PRIMARY KEY,
qty           INT);

Table on Postgres server:

-- load extension first time after install
CREATE EXTENSION mysql_fdw;

-- create server object
CREATE SERVER mysql_server FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host '127.0.0.1', port '3306');

-- create user mapping
CREATE USER MAPPING FOR public SERVER mysql_server OPTIONS (username 'edb', password 'edb');

-- create foreign table
CREATE FOREIGN TABLE sales_records(
warehouse_id      INT,
qty    		  INT)
SERVER mysql_server OPTIONS (dbname 'edb', table_name 'sales_records');

-- insert into table
INSERT INTO sales_records values (1, 100);
INSERT INTO sales_records values (2, 75);
INSERT INTO sales_records values (3, 200);

The Output:

-- ORDER BY ASC
edb=#EXPLAIN VERBOSE SELECT * FROM sales_records WHERE qty > 80 ORDER BY warehouse_id;
Output
                                                                     QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------------
 Foreign Scan on public.sales_records  (cost=10.00..1010.00 rows=1000 width=8)
   Output: warehouse_id, qty
   Local server startup cost: 10
   Remote query: SELECT ,  FROM . WHERE (( > 80)) ORDER BY  IS NULL,  ASC
(4 rows)
-- ORDER BY DESC
edb=#EXPLAIN VERBOSE SELECT * FROM sales_records ORDER BY warehouse_id DESC;
Output
                                                             QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------
 Foreign Scan on public.sales_records  (cost=10.00..1010.00 rows=1000 width=8)
   Output: warehouse_id, qty
   Local server startup cost: 10
   Remote query: SELECT ,  FROM . ORDER BY  IS NOT NULL,  DESC
(4 rows)
-- ORDER BY with AGGREGATES
edb@91975=#EXPLAIN VERBOSE SELECT count(warehouse_id) FROM sales_records WHERE qty > 80 group by warehouse_id ORDER BY warehouse_id;
Output
                                                                                  QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Foreign Scan  (cost=15.00..25.00 rows=10 width=12)
   Output: (count(warehouse_id)), warehouse_id
   Relations: Aggregate on (edb.sales_records)
   Local server startup cost: 10
   Remote query: SELECT count(),  FROM . WHERE (( > 80)) GROUP BY 2 ORDER BY  IS NULL,  ASC
(5 rows)