londiste: create_partition now sets owner to match parent table
authormartinko <gamato@users.sf.net>
Fri, 15 Feb 2013 12:47:08 +0000 (13:47 +0100)
committermartinko <gamato@users.sf.net>
Fri, 15 Feb 2013 12:47:08 +0000 (13:47 +0100)
sql/londiste/functions/londiste.create_partition.sql

index b13448b461565cec7dbb347fabd471d138261b9c..3d540e333a1d33f42e4a1e80ac4ae4c7c6e29191 100644 (file)
@@ -47,6 +47,7 @@ declare
     parent_oid      oid;
     part_schema     text;
     part_name       text;
+    owner           name;
     pos             int4;
     fq_table        text;
     fq_part         text;
@@ -112,6 +113,20 @@ begin
     sql := sql || ') inherits (' || fq_table || ')';
     execute sql;
 
+    -- find out parent table owner
+    select o.rolname into owner
+      from pg_class t, pg_namespace s, pg_roles o
+     where t.relnamespace = s.oid
+       and s.nspname = parent_schema
+       and t.relname = parent_name
+       and t.relowner = o.oid;
+
+    -- set proper part table ownership
+    if owner != user then
+        sql = 'alter table ' || fq_part || ' owner to ' || owner;
+        execute sql;
+    end if;
+
     -- extra check constraint
     if i_part_field != '' then
         part_start := date_trunc(i_part_period, i_part_time);
@@ -183,7 +198,7 @@ begin
 
     -- copy rules
     for r in
-        select rw.rulename, rw.ev_enabled, pg_get_ruledef(rw.oid) as definition
+        select rw.rulename, rw.ev_enabled, pg_catalog.pg_get_ruledef(rw.oid) as definition
           from pg_catalog.pg_rewrite rw
          where rw.ev_class = parent_oid
            and rw.rulename <> '_RETURN'::name
@@ -226,4 +241,3 @@ begin
     return 1;
 end;
 $$ language plpgsql;
-