newer pg module
[mirror/dsa-puppet.git] / 3rdparty / modules / postgresql / manifests / server / schema.pp
1 # = Type: postgresql::server::schema
2 #
3 # Create a new schema. See README.md for more details.
4 #
5 # == Requires:
6 #
7 # The database must exist and the PostgreSQL user should have enough privileges
8 #
9 # == Sample Usage:
10 #
11 # postgresql::server::schema {'private':
12 #     db => 'template1',
13 # }
14 #
15 define postgresql::server::schema(
16   $db               = $postgresql::server::default_database,
17   $owner            = undef,
18   $schema           = $title,
19   $connect_settings = $postgresql::server::default_connect_settings,
20 ) {
21   $user           = $postgresql::server::user
22   $group          = $postgresql::server::group
23   $psql_path      = $postgresql::server::psql_path
24   $version        = $postgresql::server::_version
25   $module_workdir = $postgresql::server::module_workdir
26
27   Postgresql::Server::Db <| dbname == $db |> -> Postgresql::Server::Schema[$name]
28
29   # If the connection settings do not contain a port, then use the local server port
30   if $connect_settings != undef and has_key( $connect_settings, 'PGPORT') {
31     $port = undef
32   } else {
33     $port = $postgresql::server::port
34   }
35
36   Postgresql_psql {
37     db         => $db,
38     psql_user  => $user,
39     psql_group => $group,
40     psql_path  => $psql_path,
41     port       => $port,
42     cwd        => $module_workdir,
43     connect_settings => $connect_settings,
44   }
45
46   postgresql_psql { "${db}: CREATE SCHEMA \"${schema}\"":
47     command => "CREATE SCHEMA \"${schema}\"",
48     unless  => "SELECT 1 FROM pg_namespace WHERE nspname = '${schema}'",
49     require => Class['postgresql::server'],
50   }
51
52   if $owner {
53     postgresql_psql { "${db}: ALTER SCHEMA \"${schema}\" OWNER TO \"${owner}\"":
54       command => "ALTER SCHEMA \"${schema}\" OWNER TO ${owner}",
55       unless  => "SELECT 1 FROM pg_namespace JOIN pg_roles rol ON nspowner = rol.oid WHERE nspname = '${schema}' AND rolname = '${owner}'",
56       require => Postgresql_psql["${db}: CREATE SCHEMA \"${schema}\""],
57     }
58
59     if defined(Postgresql::Server::Role[$owner]) {
60       Postgresql::Server::Role[$owner]->Postgresql_psql["${db}: ALTER SCHEMA \"${schema}\" OWNER TO \"${owner}\""]
61     }
62   }
63 }