diff --git a/expected/array.out b/expected/array.out
index 4094d98492..fe64c54f24 100644
--- a/expected/array.out
+++ b/expected/array.out
@@ -1,3 +1,19 @@
+/*
+ * ---------------------------------------------
+ *  NOTE: This test behaves differenly on PgPro
+ * ---------------------------------------------
+ *
+ * --------------------
+ *  array.sql and array_1.sql
+ * --------------------
+ * Test output for 64-bit and 32-bit systems respectively.
+ *
+ * --------------------
+ *  array_2.sql and array_3.sql
+ * --------------------
+ * Since 6ed83d5fa55c in PostgreSQL 17, the order of rows
+ * in the output has been changed.
+ */
 set enable_seqscan=off;
 set enable_sort=off;
 /*
diff --git a/expected/array_1.out b/expected/array_1.out
index ec3abfb693..3f3bf80bf0 100644
--- a/expected/array_1.out
+++ b/expected/array_1.out
@@ -1,3 +1,19 @@
+/*
+ * ---------------------------------------------
+ *  NOTE: This test behaves differenly on PgPro
+ * ---------------------------------------------
+ *
+ * --------------------
+ *  array.sql and array_1.sql
+ * --------------------
+ * Test output for 64-bit and 32-bit systems respectively.
+ *
+ * --------------------
+ *  array_2.sql and array_3.sql
+ * --------------------
+ * Since 6ed83d5fa55c in PostgreSQL 17, the order of rows
+ * in the output has been changed.
+ */
 set enable_seqscan=off;
 set enable_sort=off;
 /*
diff --git a/expected/array_2.out b/expected/array_2.out
new file mode 100644
index 0000000000..0097a5b5f4
--- /dev/null
+++ b/expected/array_2.out
@@ -0,0 +1,899 @@
+/*
+ * ---------------------------------------------
+ *  NOTE: This test behaves differenly on PgPro
+ * ---------------------------------------------
+ *
+ * --------------------
+ *  array.sql and array_1.sql
+ * --------------------
+ * Test output for 64-bit and 32-bit systems respectively.
+ *
+ * --------------------
+ *  array_2.sql and array_3.sql
+ * --------------------
+ * Since 6ed83d5fa55c in PostgreSQL 17, the order of rows
+ * in the output has been changed.
+ */
+set enable_seqscan=off;
+set enable_sort=off;
+/*
+ * Complete checks for int2[].
+ */
+CREATE TABLE test_array (
+	i int2[]
+);
+INSERT INTO test_array VALUES ('{}'), ('{0}'), ('{1,2,3,4}'), ('{1,2,3}'), ('{1,2}'), ('{1}');
+CREATE INDEX idx_array ON test_array USING rum (i rum_anyarray_ops);
+SELECT NULL::int[] = '{1}';
+ ?column? 
+----------
+ 
+(1 row)
+
+SELECT NULL::int[] && '{1}';
+ ?column? 
+----------
+ 
+(1 row)
+
+SELECT NULL::int[] @> '{1}';
+ ?column? 
+----------
+ 
+(1 row)
+
+SELECT NULL::int[] <@ '{1}';
+ ?column? 
+----------
+ 
+(1 row)
+
+SELECT NULL::int[] % '{1}';
+ ?column? 
+----------
+ 
+(1 row)
+
+SELECT NULL::int[] <=> '{1}';
+ ?column? 
+----------
+         
+(1 row)
+
+INSERT INTO test_array VALUES (NULL);
+SELECT * FROM test_array WHERE i = '{1}';
+  i  
+-----
+ {1}
+(1 row)
+
+DELETE FROM test_array WHERE i IS NULL;
+SELECT * FROM test_array WHERE i = '{NULL}';
+ERROR:  array must not contain nulls
+SELECT * FROM test_array WHERE i = '{1,2,3,NULL}';
+ERROR:  array must not contain nulls
+SELECT * FROM test_array WHERE i = '{{1,2},{3,4}}';
+ERROR:  array must have 1 dimension
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i = '{}'::smallint[])
+(2 rows)
+
+SELECT * FROM test_array WHERE i = '{}';
+ i  
+----
+ {}
+(1 row)
+
+SELECT * FROM test_array WHERE i = '{0}';
+  i  
+-----
+ {0}
+(1 row)
+
+SELECT * FROM test_array WHERE i = '{1}';
+  i  
+-----
+ {1}
+(1 row)
+
+SELECT * FROM test_array WHERE i = '{1,2}';
+   i   
+-------
+ {1,2}
+(1 row)
+
+SELECT * FROM test_array WHERE i = '{2,1}';
+ i 
+---
+(0 rows)
+
+SELECT * FROM test_array WHERE i = '{1,2,3,3}';
+ i 
+---
+(0 rows)
+
+SELECT * FROM test_array WHERE i = '{0,0}';
+ i 
+---
+(0 rows)
+
+SELECT * FROM test_array WHERE i = '{100}';
+ i 
+---
+(0 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{}'::smallint[])
+(2 rows)
+
+SELECT * FROM test_array WHERE i && '{}';
+ i 
+---
+(0 rows)
+
+SELECT * FROM test_array WHERE i && '{1}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i && '{2}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+(3 rows)
+
+SELECT * FROM test_array WHERE i && '{3}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+(2 rows)
+
+SELECT * FROM test_array WHERE i && '{4}';
+     i     
+-----------
+ {1,2,3,4}
+(1 row)
+
+SELECT * FROM test_array WHERE i && '{1,2}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i && '{1,2,3}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i && '{1,2,3,4}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i && '{4,3,2,1}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i && '{0,0}';
+  i  
+-----
+ {0}
+(1 row)
+
+SELECT * FROM test_array WHERE i && '{100}';
+ i 
+---
+(0 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i @> '{}'::smallint[])
+(2 rows)
+
+SELECT * FROM test_array WHERE i @> '{}';
+     i     
+-----------
+ {}
+ {0}
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(6 rows)
+
+SELECT * FROM test_array WHERE i @> '{1}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i @> '{2}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+(3 rows)
+
+SELECT * FROM test_array WHERE i @> '{3}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+(2 rows)
+
+SELECT * FROM test_array WHERE i @> '{4}';
+     i     
+-----------
+ {1,2,3,4}
+(1 row)
+
+SELECT * FROM test_array WHERE i @> '{1,2,4}';
+     i     
+-----------
+ {1,2,3,4}
+(1 row)
+
+SELECT * FROM test_array WHERE i @> '{1,2,3,4}';
+     i     
+-----------
+ {1,2,3,4}
+(1 row)
+
+SELECT * FROM test_array WHERE i @> '{4,3,2,1}';
+     i     
+-----------
+ {1,2,3,4}
+(1 row)
+
+SELECT * FROM test_array WHERE i @> '{0,0}';
+  i  
+-----
+ {0}
+(1 row)
+
+SELECT * FROM test_array WHERE i @> '{100}';
+ i 
+---
+(0 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i <@ '{}'::smallint[])
+(2 rows)
+
+SELECT * FROM test_array WHERE i <@ '{}';
+ i  
+----
+ {}
+(1 row)
+
+SELECT * FROM test_array WHERE i <@ '{1}';
+  i  
+-----
+ {}
+ {1}
+(2 rows)
+
+SELECT * FROM test_array WHERE i <@ '{2}';
+ i  
+----
+ {}
+(1 row)
+
+SELECT * FROM test_array WHERE i <@ '{1,2,4}';
+   i   
+-------
+ {}
+ {1,2}
+ {1}
+(3 rows)
+
+SELECT * FROM test_array WHERE i <@ '{1,2,3,4}';
+     i     
+-----------
+ {}
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(5 rows)
+
+SELECT * FROM test_array WHERE i <@ '{4,3,2,1}';
+     i     
+-----------
+ {}
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(5 rows)
+
+SELECT * FROM test_array WHERE i <@ '{0,0}';
+  i  
+-----
+ {}
+ {0}
+(2 rows)
+
+SELECT * FROM test_array WHERE i <@ '{100}';
+ i  
+----
+ {}
+(1 row)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i % '{}'::smallint[])
+(2 rows)
+
+SELECT * FROM test_array WHERE i % '{}';
+ i 
+---
+(0 rows)
+
+SELECT * FROM test_array WHERE i % '{1}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i % '{2}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+(3 rows)
+
+SELECT * FROM test_array WHERE i % '{1,2}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i % '{1,2,4}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i % '{1,2,3,4}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i % '{4,3,2,1}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i % '{1,2,3,4,5}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+(3 rows)
+
+SELECT * FROM test_array WHERE i % '{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}';
+     i     
+-----------
+ {1,2,3,4}
+(1 row)
+
+SELECT * FROM test_array WHERE i % '{1,10,20,30,40,50}';
+ i 
+---
+(0 rows)
+
+SELECT * FROM test_array WHERE i % '{1,10,20,30}';
+  i  
+-----
+ {1}
+(1 row)
+
+SELECT * FROM test_array WHERE i % '{1,1,1,1,1}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i % '{0,0}';
+  i  
+-----
+ {0}
+(1 row)
+
+SELECT * FROM test_array WHERE i % '{100}';
+ i 
+---
+(0 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{1}' ORDER BY i <=> '{1}' ASC;
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{1}'::smallint[])
+   Order By: (i <=> '{1}'::smallint[])
+(3 rows)
+
+SELECT * FROM test_array WHERE i && '{1}' ORDER BY i <=> '{1}' ASC;
+     i     
+-----------
+ {1}
+ {1,2}
+ {1,2,3}
+ {1,2,3,4}
+(4 rows)
+
+DROP INDEX idx_array;
+ALTER TABLE test_array ADD COLUMN add_info timestamp;
+CREATE INDEX idx_array ON test_array
+USING rum (i rum_anyarray_addon_ops, add_info)
+WITH (attach = 'add_info', to = 'i');
+WITH q as (
+     SELECT row_number() OVER (ORDER BY i) idx, ctid FROM test_array
+)
+UPDATE test_array SET add_info = '2016-05-16 14:21:25'::timestamp +
+								 format('%s days', q.idx)::interval
+FROM q WHERE test_array.ctid = q.ctid;
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i = '{}'::smallint[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{}'::smallint[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i @> '{}'::smallint[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i <@ '{}'::smallint[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
+            QUERY PLAN            
+----------------------------------
+ Seq Scan on test_array
+   Filter: (i % '{}'::smallint[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{1}' ORDER BY add_info <=> '2016-05-16 14:21:25' LIMIT 10;
+                                        QUERY PLAN                                        
+------------------------------------------------------------------------------------------
+ Limit
+   ->  Index Scan using idx_array on test_array
+         Index Cond: (i && '{1}'::smallint[])
+         Order By: (add_info <=> 'Mon May 16 14:21:25 2016'::timestamp without time zone)
+(4 rows)
+
+SELECT * FROM test_array WHERE i && '{1}' ORDER BY add_info <=> '2016-05-16 14:21:25' LIMIT 10;
+     i     |         add_info         
+-----------+--------------------------
+ {1}       | Thu May 19 14:21:25 2016
+ {1,2}     | Fri May 20 14:21:25 2016
+ {1,2,3}   | Sat May 21 14:21:25 2016
+ {1,2,3,4} | Sun May 22 14:21:25 2016
+(4 rows)
+
+DROP INDEX idx_array;
+/*
+ * Sanity checks for popular array types.
+ */
+ALTER TABLE test_array ALTER COLUMN i TYPE int4[];
+CREATE INDEX idx_array ON test_array USING rum (i rum_anyarray_ops);
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i = '{}'::integer[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{}'::integer[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i @> '{}'::integer[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i <@ '{}'::integer[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i % '{}'::integer[])
+(2 rows)
+
+DROP INDEX idx_array;
+ALTER TABLE test_array ALTER COLUMN i TYPE int8[];
+CREATE INDEX idx_array ON test_array USING rum (i rum_anyarray_ops);
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i = '{}'::bigint[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{}'::bigint[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i @> '{}'::bigint[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i <@ '{}'::bigint[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i % '{}'::bigint[])
+(2 rows)
+
+DROP INDEX idx_array;
+ALTER TABLE test_array ALTER COLUMN i TYPE text[];
+CREATE INDEX idx_array ON test_array USING rum (i rum_anyarray_ops);
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i = '{}'::text[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{}'::text[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i @> '{}'::text[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i <@ '{}'::text[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i % '{}'::text[])
+(2 rows)
+
+DROP INDEX idx_array;
+ALTER TABLE test_array ALTER COLUMN i TYPE varchar[];
+CREATE INDEX idx_array ON test_array USING rum (i rum_anyarray_ops);
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
+                  QUERY PLAN                   
+-----------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i = '{}'::character varying[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
+                   QUERY PLAN                   
+------------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{}'::character varying[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
+                   QUERY PLAN                   
+------------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i @> '{}'::character varying[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
+                   QUERY PLAN                   
+------------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i <@ '{}'::character varying[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
+                  QUERY PLAN                   
+-----------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i % '{}'::character varying[])
+(2 rows)
+
+DROP INDEX idx_array;
+ALTER TABLE test_array ALTER COLUMN i TYPE char[];
+CREATE INDEX idx_array ON test_array USING rum (i rum_anyarray_ops);
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i = '{}'::bpchar[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{}'::bpchar[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i @> '{}'::bpchar[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i <@ '{}'::bpchar[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i % '{}'::bpchar[])
+(2 rows)
+
+DROP INDEX idx_array;
+ALTER TABLE test_array ALTER COLUMN i TYPE numeric[] USING i::numeric[];
+CREATE INDEX idx_array ON test_array USING rum (i rum_anyarray_ops);
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i = '{}'::numeric[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{}'::numeric[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i @> '{}'::numeric[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i <@ '{}'::numeric[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i % '{}'::numeric[])
+(2 rows)
+
+DROP INDEX idx_array;
+ALTER TABLE test_array ALTER COLUMN i TYPE float4[] USING i::float4[];
+CREATE INDEX idx_array ON test_array USING rum (i rum_anyarray_ops);
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i = '{}'::real[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{}'::real[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i @> '{}'::real[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i <@ '{}'::real[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i % '{}'::real[])
+(2 rows)
+
+DROP INDEX idx_array;
+ALTER TABLE test_array ALTER COLUMN i TYPE float8[] USING i::float8[];
+CREATE INDEX idx_array ON test_array USING rum (i rum_anyarray_ops);
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
+                  QUERY PLAN                  
+----------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i = '{}'::double precision[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
+                  QUERY PLAN                   
+-----------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{}'::double precision[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
+                  QUERY PLAN                   
+-----------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i @> '{}'::double precision[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
+                  QUERY PLAN                   
+-----------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i <@ '{}'::double precision[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
+                  QUERY PLAN                  
+----------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i % '{}'::double precision[])
+(2 rows)
+
+DROP INDEX idx_array;
+/*
+ * Check ordering using distance operator
+ */
+CREATE TABLE test_array_order (
+    i int2[]
+);
+\copy test_array_order(i) from 'data/rum_array.data';
+CREATE INDEX idx_array_order ON test_array_order USING rum (i rum_anyarray_ops);
+EXPLAIN (COSTS OFF)
+SELECT *, i <=> '{51}' from test_array_order WHERE i @> '{23,20}' order by i <=> '{51}';
+                      QUERY PLAN                      
+------------------------------------------------------
+ Index Scan using idx_array_order on test_array_order
+   Index Cond: (i @> '{23,20}'::smallint[])
+   Order By: (i <=> '{51}'::smallint[])
+(3 rows)
+
+SELECT i,
+	CASE WHEN distance = 'Infinity' THEN -1
+		ELSE distance::numeric(18,14)
+	END distance
+	FROM
+		(SELECT *, (i <=> '{51}') AS distance
+		FROM test_array_order WHERE i @> '{23,20}' ORDER BY i <=> '{51}') t;
+          i          |     distance     
+---------------------+------------------
+ {20,23,51}          | 1.73205080756888
+ {33,51,20,77,23,65} | 2.44948974278318
+ {6,97,20,89,23}     |               -1
+ {20,98,30,23,1,66}  |               -1
+ {57,23,39,46,50,20} |               -1
+ {81,20,26,22,23}    |               -1
+ {73,23,20}          |               -1
+ {18,23,10,90,15,20} |               -1
+ {23,76,34,23,2,20}  |               -1
+ {20,60,45,23,29}    |               -1
+ {23,89,38,20,40,95} |               -1
+ {23,20,72}          |               -1
+(12 rows)
+
diff --git a/expected/array_3.out b/expected/array_3.out
new file mode 100644
index 0000000000..d5012c3a38
--- /dev/null
+++ b/expected/array_3.out
@@ -0,0 +1,892 @@
+/*
+ * ---------------------------------------------
+ *  NOTE: This test behaves differenly on PgPro
+ * ---------------------------------------------
+ *
+ * --------------------
+ *  array.sql and array_1.sql
+ * --------------------
+ * Test output for 64-bit and 32-bit systems respectively.
+ *
+ * --------------------
+ *  array_2.sql and array_3.sql
+ * --------------------
+ * Since 6ed83d5fa55c in PostgreSQL 17, the order of rows
+ * in the output has been changed.
+ */
+set enable_seqscan=off;
+set enable_sort=off;
+/*
+ * Complete checks for int2[].
+ */
+CREATE TABLE test_array (
+	i int2[]
+);
+INSERT INTO test_array VALUES ('{}'), ('{0}'), ('{1,2,3,4}'), ('{1,2,3}'), ('{1,2}'), ('{1}');
+CREATE INDEX idx_array ON test_array USING rum (i rum_anyarray_ops);
+SELECT NULL::int[] = '{1}';
+ ?column? 
+----------
+ 
+(1 row)
+
+SELECT NULL::int[] && '{1}';
+ ?column? 
+----------
+ 
+(1 row)
+
+SELECT NULL::int[] @> '{1}';
+ ?column? 
+----------
+ 
+(1 row)
+
+SELECT NULL::int[] <@ '{1}';
+ ?column? 
+----------
+ 
+(1 row)
+
+SELECT NULL::int[] % '{1}';
+ ?column? 
+----------
+ 
+(1 row)
+
+SELECT NULL::int[] <=> '{1}';
+ ?column? 
+----------
+         
+(1 row)
+
+INSERT INTO test_array VALUES (NULL);
+SELECT * FROM test_array WHERE i = '{1}';
+  i  
+-----
+ {1}
+(1 row)
+
+DELETE FROM test_array WHERE i IS NULL;
+SELECT * FROM test_array WHERE i = '{NULL}';
+ERROR:  array must not contain nulls
+SELECT * FROM test_array WHERE i = '{1,2,3,NULL}';
+ERROR:  array must not contain nulls
+SELECT * FROM test_array WHERE i = '{{1,2},{3,4}}';
+ERROR:  array must have 1 dimension
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i = '{}'::smallint[])
+(2 rows)
+
+SELECT * FROM test_array WHERE i = '{}';
+ i  
+----
+ {}
+(1 row)
+
+SELECT * FROM test_array WHERE i = '{0}';
+  i  
+-----
+ {0}
+(1 row)
+
+SELECT * FROM test_array WHERE i = '{1}';
+  i  
+-----
+ {1}
+(1 row)
+
+SELECT * FROM test_array WHERE i = '{1,2}';
+   i   
+-------
+ {1,2}
+(1 row)
+
+SELECT * FROM test_array WHERE i = '{2,1}';
+ i 
+---
+(0 rows)
+
+SELECT * FROM test_array WHERE i = '{1,2,3,3}';
+ i 
+---
+(0 rows)
+
+SELECT * FROM test_array WHERE i = '{0,0}';
+ i 
+---
+(0 rows)
+
+SELECT * FROM test_array WHERE i = '{100}';
+ i 
+---
+(0 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{}'::smallint[])
+(2 rows)
+
+SELECT * FROM test_array WHERE i && '{}';
+ i 
+---
+(0 rows)
+
+SELECT * FROM test_array WHERE i && '{1}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i && '{2}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+(3 rows)
+
+SELECT * FROM test_array WHERE i && '{3}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+(2 rows)
+
+SELECT * FROM test_array WHERE i && '{4}';
+     i     
+-----------
+ {1,2,3,4}
+(1 row)
+
+SELECT * FROM test_array WHERE i && '{1,2}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i && '{1,2,3}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i && '{1,2,3,4}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i && '{4,3,2,1}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i && '{0,0}';
+  i  
+-----
+ {0}
+(1 row)
+
+SELECT * FROM test_array WHERE i && '{100}';
+ i 
+---
+(0 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i @> '{}'::smallint[])
+(2 rows)
+
+SELECT * FROM test_array WHERE i @> '{}';
+     i     
+-----------
+ {}
+ {0}
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(6 rows)
+
+SELECT * FROM test_array WHERE i @> '{1}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i @> '{2}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+(3 rows)
+
+SELECT * FROM test_array WHERE i @> '{3}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+(2 rows)
+
+SELECT * FROM test_array WHERE i @> '{4}';
+     i     
+-----------
+ {1,2,3,4}
+(1 row)
+
+SELECT * FROM test_array WHERE i @> '{1,2,4}';
+     i     
+-----------
+ {1,2,3,4}
+(1 row)
+
+SELECT * FROM test_array WHERE i @> '{1,2,3,4}';
+     i     
+-----------
+ {1,2,3,4}
+(1 row)
+
+SELECT * FROM test_array WHERE i @> '{4,3,2,1}';
+     i     
+-----------
+ {1,2,3,4}
+(1 row)
+
+SELECT * FROM test_array WHERE i @> '{0,0}';
+  i  
+-----
+ {0}
+(1 row)
+
+SELECT * FROM test_array WHERE i @> '{100}';
+ i 
+---
+(0 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i <@ '{}'::smallint[])
+(2 rows)
+
+SELECT * FROM test_array WHERE i <@ '{}';
+ i  
+----
+ {}
+(1 row)
+
+SELECT * FROM test_array WHERE i <@ '{1}';
+  i  
+-----
+ {}
+ {1}
+(2 rows)
+
+SELECT * FROM test_array WHERE i <@ '{2}';
+ i  
+----
+ {}
+(1 row)
+
+SELECT * FROM test_array WHERE i <@ '{1,2,4}';
+   i   
+-------
+ {}
+ {1,2}
+ {1}
+(3 rows)
+
+SELECT * FROM test_array WHERE i <@ '{1,2,3,4}';
+     i     
+-----------
+ {}
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(5 rows)
+
+SELECT * FROM test_array WHERE i <@ '{4,3,2,1}';
+     i     
+-----------
+ {}
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(5 rows)
+
+SELECT * FROM test_array WHERE i <@ '{0,0}';
+  i  
+-----
+ {}
+ {0}
+(2 rows)
+
+SELECT * FROM test_array WHERE i <@ '{100}';
+ i  
+----
+ {}
+(1 row)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i % '{}'::smallint[])
+(2 rows)
+
+SELECT * FROM test_array WHERE i % '{}';
+ i 
+---
+(0 rows)
+
+SELECT * FROM test_array WHERE i % '{1}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i % '{2}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+(3 rows)
+
+SELECT * FROM test_array WHERE i % '{1,2}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i % '{1,2,4}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i % '{1,2,3,4}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i % '{4,3,2,1}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i % '{1,2,3,4,5}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+(3 rows)
+
+SELECT * FROM test_array WHERE i % '{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}';
+     i     
+-----------
+ {1,2,3,4}
+(1 row)
+
+SELECT * FROM test_array WHERE i % '{1,10,20,30,40,50}';
+ i 
+---
+(0 rows)
+
+SELECT * FROM test_array WHERE i % '{1,10,20,30}';
+  i  
+-----
+ {1}
+(1 row)
+
+SELECT * FROM test_array WHERE i % '{1,1,1,1,1}';
+     i     
+-----------
+ {1,2,3,4}
+ {1,2,3}
+ {1,2}
+ {1}
+(4 rows)
+
+SELECT * FROM test_array WHERE i % '{0,0}';
+  i  
+-----
+ {0}
+(1 row)
+
+SELECT * FROM test_array WHERE i % '{100}';
+ i 
+---
+(0 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{1}' ORDER BY i <=> '{1}' ASC;
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{1}'::smallint[])
+   Order By: (i <=> '{1}'::smallint[])
+(3 rows)
+
+SELECT * FROM test_array WHERE i && '{1}' ORDER BY i <=> '{1}' ASC;
+     i     
+-----------
+ {1}
+ {1,2}
+ {1,2,3}
+ {1,2,3,4}
+(4 rows)
+
+DROP INDEX idx_array;
+ALTER TABLE test_array ADD COLUMN add_info timestamp;
+CREATE INDEX idx_array ON test_array
+USING rum (i rum_anyarray_addon_ops, add_info)
+WITH (attach = 'add_info', to = 'i');
+WITH q as (
+     SELECT row_number() OVER (ORDER BY i) idx, ctid FROM test_array
+)
+UPDATE test_array SET add_info = '2016-05-16 14:21:25'::timestamp +
+								 format('%s days', q.idx)::interval
+FROM q WHERE test_array.ctid = q.ctid;
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i = '{}'::smallint[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{}'::smallint[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i @> '{}'::smallint[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i <@ '{}'::smallint[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
+            QUERY PLAN            
+----------------------------------
+ Seq Scan on test_array
+   Filter: (i % '{}'::smallint[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{1}' ORDER BY add_info <=> '2016-05-16 14:21:25' LIMIT 10;
+                                        QUERY PLAN                                        
+------------------------------------------------------------------------------------------
+ Limit
+   ->  Index Scan using idx_array on test_array
+         Index Cond: (i && '{1}'::smallint[])
+         Order By: (add_info <=> 'Mon May 16 14:21:25 2016'::timestamp without time zone)
+(4 rows)
+
+SELECT * FROM test_array WHERE i && '{1}' ORDER BY add_info <=> '2016-05-16 14:21:25' LIMIT 10;
+ERROR:  doesn't support order by over pass-by-reference column
+DROP INDEX idx_array;
+/*
+ * Sanity checks for popular array types.
+ */
+ALTER TABLE test_array ALTER COLUMN i TYPE int4[];
+CREATE INDEX idx_array ON test_array USING rum (i rum_anyarray_ops);
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i = '{}'::integer[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{}'::integer[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i @> '{}'::integer[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i <@ '{}'::integer[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i % '{}'::integer[])
+(2 rows)
+
+DROP INDEX idx_array;
+ALTER TABLE test_array ALTER COLUMN i TYPE int8[];
+CREATE INDEX idx_array ON test_array USING rum (i rum_anyarray_ops);
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i = '{}'::bigint[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{}'::bigint[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i @> '{}'::bigint[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i <@ '{}'::bigint[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i % '{}'::bigint[])
+(2 rows)
+
+DROP INDEX idx_array;
+ALTER TABLE test_array ALTER COLUMN i TYPE text[];
+CREATE INDEX idx_array ON test_array USING rum (i rum_anyarray_ops);
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i = '{}'::text[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{}'::text[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i @> '{}'::text[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i <@ '{}'::text[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i % '{}'::text[])
+(2 rows)
+
+DROP INDEX idx_array;
+ALTER TABLE test_array ALTER COLUMN i TYPE varchar[];
+CREATE INDEX idx_array ON test_array USING rum (i rum_anyarray_ops);
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
+                  QUERY PLAN                   
+-----------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i = '{}'::character varying[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
+                   QUERY PLAN                   
+------------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{}'::character varying[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
+                   QUERY PLAN                   
+------------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i @> '{}'::character varying[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
+                   QUERY PLAN                   
+------------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i <@ '{}'::character varying[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
+                  QUERY PLAN                   
+-----------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i % '{}'::character varying[])
+(2 rows)
+
+DROP INDEX idx_array;
+ALTER TABLE test_array ALTER COLUMN i TYPE char[];
+CREATE INDEX idx_array ON test_array USING rum (i rum_anyarray_ops);
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i = '{}'::bpchar[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{}'::bpchar[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i @> '{}'::bpchar[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i <@ '{}'::bpchar[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i % '{}'::bpchar[])
+(2 rows)
+
+DROP INDEX idx_array;
+ALTER TABLE test_array ALTER COLUMN i TYPE numeric[] USING i::numeric[];
+CREATE INDEX idx_array ON test_array USING rum (i rum_anyarray_ops);
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i = '{}'::numeric[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{}'::numeric[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i @> '{}'::numeric[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i <@ '{}'::numeric[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i % '{}'::numeric[])
+(2 rows)
+
+DROP INDEX idx_array;
+ALTER TABLE test_array ALTER COLUMN i TYPE float4[] USING i::float4[];
+CREATE INDEX idx_array ON test_array USING rum (i rum_anyarray_ops);
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i = '{}'::real[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{}'::real[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i @> '{}'::real[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i <@ '{}'::real[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
+                QUERY PLAN                
+------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i % '{}'::real[])
+(2 rows)
+
+DROP INDEX idx_array;
+ALTER TABLE test_array ALTER COLUMN i TYPE float8[] USING i::float8[];
+CREATE INDEX idx_array ON test_array USING rum (i rum_anyarray_ops);
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
+                  QUERY PLAN                  
+----------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i = '{}'::double precision[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
+                  QUERY PLAN                   
+-----------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i && '{}'::double precision[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
+                  QUERY PLAN                   
+-----------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i @> '{}'::double precision[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
+                  QUERY PLAN                   
+-----------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i <@ '{}'::double precision[])
+(2 rows)
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
+                  QUERY PLAN                  
+----------------------------------------------
+ Index Scan using idx_array on test_array
+   Index Cond: (i % '{}'::double precision[])
+(2 rows)
+
+DROP INDEX idx_array;
+/*
+ * Check ordering using distance operator
+ */
+CREATE TABLE test_array_order (
+    i int2[]
+);
+\copy test_array_order(i) from 'data/rum_array.data';
+CREATE INDEX idx_array_order ON test_array_order USING rum (i rum_anyarray_ops);
+EXPLAIN (COSTS OFF)
+SELECT *, i <=> '{51}' from test_array_order WHERE i @> '{23,20}' order by i <=> '{51}';
+                      QUERY PLAN                      
+------------------------------------------------------
+ Index Scan using idx_array_order on test_array_order
+   Index Cond: (i @> '{23,20}'::smallint[])
+   Order By: (i <=> '{51}'::smallint[])
+(3 rows)
+
+SELECT i,
+	CASE WHEN distance = 'Infinity' THEN -1
+		ELSE distance::numeric(18,14)
+	END distance
+	FROM
+		(SELECT *, (i <=> '{51}') AS distance
+		FROM test_array_order WHERE i @> '{23,20}' ORDER BY i <=> '{51}') t;
+          i          |     distance     
+---------------------+------------------
+ {20,23,51}          | 1.73205080756888
+ {33,51,20,77,23,65} | 2.44948974278318
+ {18,23,10,90,15,20} |               -1
+ {23,76,34,23,2,20}  |               -1
+ {73,23,20}          |               -1
+ {23,89,38,20,40,95} |               -1
+ {23,20,72}          |               -1
+ {20,60,45,23,29}    |               -1
+ {81,20,26,22,23}    |               -1
+ {6,97,20,89,23}     |               -1
+ {20,98,30,23,1,66}  |               -1
+ {57,23,39,46,50,20} |               -1
+(12 rows)
+
diff --git a/sql/array.sql b/sql/array.sql
index 11defc9e07..c17c1252c8 100644
--- a/sql/array.sql
+++ b/sql/array.sql
@@ -1,7 +1,24 @@
+/*
+ * ---------------------------------------------
+ *  NOTE: This test behaves differenly on PgPro
+ * ---------------------------------------------
+ *
+ * --------------------
+ *  array.sql and array_1.sql
+ * --------------------
+ * Test output for 64-bit and 32-bit systems respectively.
+ *
+ * --------------------
+ *  array_2.sql and array_3.sql
+ * --------------------
+ * Since 6ed83d5fa55c in PostgreSQL 17, the order of rows
+ * in the output has been changed.
+ */
+
+
 set enable_seqscan=off;
 set enable_sort=off;
 
-
 /*
  * Complete checks for int2[].
  */
diff --git a/src/rumsort.c b/src/rumsort.c
index b5691301c9..96784cd192 100644
--- a/src/rumsort.c
+++ b/src/rumsort.c
@@ -488,11 +488,23 @@ rum_tuplesort_putrum(RumTuplesortstate *state, RumSortItem *item)
 {
 	MemoryContext oldcontext;
 	SortTuple stup;
+#if PG_VERSION_NUM >= 170000
+	MinimalTuple tuple = (MinimalTuple)item;
+	Size tuplen;
+	TuplesortPublic *base = TuplesortstateGetPublic((TuplesortPublic *)state);
+#endif
 
 	oldcontext = MemoryContextSwitchTo(rum_tuplesort_get_memorycontext(state));
 	copytup_rum(state, &stup, item);
 
-#if PG_VERSION_NUM >= 160000
+#if PG_VERSION_NUM >= 170000
+	/* GetMemoryChunkSpace is not supported for bump contexts */
+	if (TupleSortUseBumpTupleCxt(base->sortopt))
+		tuplen = MAXALIGN(tuple->t_len);
+	else
+		tuplen = GetMemoryChunkSpace(tuple);
+	tuplesort_puttuple_common(state, &stup, false, tuplen);
+#elif PG_VERSION_NUM >= 160000
 	tuplesort_puttuple_common(state, &stup, false);
 #else
 	puttuple_common(state, &stup);
@@ -506,11 +518,23 @@ rum_tuplesort_putrumitem(RumTuplesortstate *state, RumScanItem *item)
 {
 	MemoryContext oldcontext;
 	SortTuple stup;
+#if PG_VERSION_NUM >= 170000
+	MinimalTuple tuple = (MinimalTuple)item;
+	Size tuplen;
+	TuplesortPublic *base = TuplesortstateGetPublic((TuplesortPublic *)state);
+#endif
 
 	oldcontext = MemoryContextSwitchTo(rum_tuplesort_get_memorycontext(state));
 	copytup_rumitem(state, &stup, item);
 
-#if PG_VERSION_NUM >= 160000
+#if PG_VERSION_NUM >= 170000
+	/* GetMemoryChunkSpace is not supported for bump contexts */
+	if (TupleSortUseBumpTupleCxt(base->sortopt))
+		tuplen = MAXALIGN(tuple->t_len);
+	else
+		tuplen = GetMemoryChunkSpace(tuple);
+	tuplesort_puttuple_common(state, &stup, false, tuplen);
+#elif PG_VERSION_NUM >= 160000
 	tuplesort_puttuple_common(state, &stup, false);
 #else
 	puttuple_common(state, &stup);
diff --git a/travis/docker-compose.yml b/travis/docker-compose.yml
index 471ab779f2..0544d8597d 100644
--- a/travis/docker-compose.yml
+++ b/travis/docker-compose.yml
@@ -1,2 +1,3 @@
-tests:
+services:
+  tests:
     build: .