newer pg module
[mirror/dsa-puppet.git] / 3rdparty / modules / postgresql / manifests / server / reassign_owned_by.pp
1 # Define for reassigning the ownership of objects within a database. See README.md for more details.
2 # This enables us to force the a particular ownership for objects within a database
3 define postgresql::server::reassign_owned_by (
4   String $old_role,
5   String $new_role,
6   String $db,
7   String $psql_user                 = $postgresql::server::user,
8   Integer $port                     = $postgresql::server::port,
9   Hash $connect_settings            = $postgresql::server::default_connect_settings,
10 ) {
11
12   $sql_command = "REASSIGN OWNED BY \"${old_role}\" TO \"${new_role}\""
13
14   $group     = $postgresql::server::group
15   $psql_path = $postgresql::server::psql_path
16
17   #
18   # Port, order of precedence: $port parameter, $connect_settings[PGPORT], $postgresql::server::port
19   #
20   if $port != undef {
21     $port_override = $port
22   } elsif $connect_settings != undef and has_key( $connect_settings, 'PGPORT') {
23     $port_override = undef
24   } else {
25     $port_override = $postgresql::server::port
26   }
27
28   $onlyif = "SELECT tablename FROM pg_catalog.pg_tables WHERE
29                schemaname NOT IN ('pg_catalog', 'information_schema') AND
30                tableowner = '${old_role}'
31              UNION ALL SELECT proname FROM pg_catalog.pg_proc WHERE
32                pg_get_userbyid(proowner) = '${old_role}'
33              UNION ALL SELECT viewname FROM pg_catalog.pg_views WHERE
34                pg_views.schemaname NOT IN ('pg_catalog', 'information_schema') AND
35                viewowner = '${old_role}'
36              UNION ALL SELECT relname FROM pg_catalog.pg_class WHERE
37                relkind='S' AND pg_get_userbyid(relowner) = '${old_role}'"
38
39   postgresql_psql { "reassign_owned_by:${db}:${sql_command}":
40     command          => $sql_command,
41     db               => $db,
42     port             => $port_override,
43     connect_settings => $connect_settings,
44     psql_user        => $psql_user,
45     psql_group       => $group,
46     psql_path        => $psql_path,
47     onlyif           => $onlyif,
48     require          => Class['postgresql::server']
49   }
50
51   if($old_role != undef and defined(Postgresql::Server::Role[$old_role])) {
52     Postgresql::Server::Role[$old_role]->Postgresql_psql["reassign_owned_by:${db}:${sql_command}"]
53   }
54   if($new_role != undef and defined(Postgresql::Server::Role[$new_role])) {
55     Postgresql::Server::Role[$new_role]->Postgresql_psql["reassign_owned_by:${db}:${sql_command}"]
56   }
57
58   if($db != undef and defined(Postgresql::Server::Database[$db])) {
59     Postgresql::Server::Database[$db]->Postgresql_psql["reassign_owned_by:${db}:${sql_command}"]
60   }
61 }