diff --git a/08-update_array.sql b/08-update_array.sql
new file mode 100644
index 0000000000000000000000000000000000000000..d1f2ffadc294a73b74200dfbe3841fa64ba91533
--- /dev/null
+++ b/08-update_array.sql
@@ -0,0 +1,14 @@
+
+-- This function returns an array adding some elements and removing others
+-- It is used to update recursively groupread and groupwrite properties
+
+CREATE OR REPLACE FUNCTION update_array(input_array VARCHAR[], elements_to_add VARCHAR[], elements_to_remove VARCHAR[]) RETURNS VARCHAR[] AS
+$func$
+SELECT array_agg(elements) FROM (
+    SELECT DISTINCT UNNEST(input_array)
+    UNION SELECT DISTINCT UNNEST(elements_to_add)
+    EXCEPT SELECT DISTINCT UNNEST(elements_to_remove)
+) AS output_values(elements)
+$func$ LANGUAGE sql;
+
+SELECT update_array('{"group1","group2"}'::VARCHAR[],'{"group2","group3"}'::VARCHAR[],'{"group1"}'::VARCHAR[]) = '{"group2","group3"}' AS test_passed;