Defined Type: postgresql::server::schema

Defined in:
manifests/server/schema.pp

Summary

Create a new schema.

Overview

Note:

The database must exist and the PostgreSQL user should have enough privileges

Examples:

postgresql::server::schema {'private':
    db => 'template1',
}

Parameters:

  • db (String[1]) (defaults to: $postgresql::server::default_database)

    Required. Sets the name of the database in which to create this schema.

  • owner (Optional[String[1]]) (defaults to: undef)

    Sets the default owner of the schema.

  • schema (String[1]) (defaults to: $title)

    Sets the name of the schema.

  • connect_settings (Hash) (defaults to: $postgresql::server::default_connect_settings)

    Specifies a hash of environment variables used when connecting to a remote server.

  • port (Stdlib::Port) (defaults to: $postgresql::server::port)

    the post the postgresql instance is listening on.

  • user (String[1]) (defaults to: $postgresql::server::user)

    Sets the OS user to run psql

  • group (String[1]) (defaults to: $postgresql::server::group)

    Sets the OS group to run psql

  • psql_path (Stdlib::Absolutepath) (defaults to: $postgresql::server::psql_path)

    Sets path to psql command

  • module_workdir (Stdlib::Absolutepath) (defaults to: $postgresql::server::module_workdir)

    Specifies working directory under which the psql command should be executed. May need to specify if ‘/tmp’ is on volume mounted with noexec option.

  • instance (String[1]) (defaults to: 'main')

    The name of the Postgresql database instance.



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'manifests/server/schema.pp', line 23

define postgresql::server::schema (
  String[1]            $db               = $postgresql::server::default_database,
  Optional[String[1]]  $owner            = undef,
  String[1]            $schema           = $title,
  Hash                 $connect_settings = $postgresql::server::default_connect_settings,
  Stdlib::Port         $port             = $postgresql::server::port,
  String[1]            $user             = $postgresql::server::user,
  String[1]            $group            = $postgresql::server::group,
  Stdlib::Absolutepath $psql_path        = $postgresql::server::psql_path,
  Stdlib::Absolutepath $module_workdir   = $postgresql::server::module_workdir,
  String[1]            $instance         = 'main',
) {
  Postgresql::Server::Db <| dbname == $db |> -> Postgresql::Server::Schema[$name]

  # If the connection settings do not contain a port, then use the local server port
  $port_override = pick($connect_settings['PGPORT'], $port)

  Postgresql_psql {
    db               => $db,
    psql_user        => $user,
    psql_group       => $group,
    psql_path        => $psql_path,
    port             => $port_override,
    cwd              => $module_workdir,
    connect_settings => $connect_settings,
    instance         => $instance,
  }

  postgresql_psql { "${db}: CREATE SCHEMA \"${schema}\"":
    command => "CREATE SCHEMA \"${schema}\"",
    unless  => "SELECT 1 FROM pg_namespace WHERE nspname = '${schema}'",
    require => Class['postgresql::server'],
  }

  if $owner {
    postgresql_psql { "${db}: ALTER SCHEMA \"${schema}\" OWNER TO \"${owner}\"":
      command => "ALTER SCHEMA \"${schema}\" OWNER TO \"${owner}\"",
      unless  => "SELECT 1 FROM pg_namespace JOIN pg_roles rol ON nspowner = rol.oid WHERE nspname = '${schema}' AND rolname = '${owner}'",
      require => Postgresql_psql["${db}: CREATE SCHEMA \"${schema}\""],
    }

    if defined(Postgresql::Server::Role[$owner]) {
      Postgresql::Server::Role[$owner] -> Postgresql_psql["${db}: ALTER SCHEMA \"${schema}\" OWNER TO \"${owner}\""]
    }
  }
}