--- /dev/null
+# Activate an extension on a postgresql database
+define postgresql::server::extension (
+ $database,
+ $extension = $name,
+ String[1] $ensure = 'present',
+ $package_name = undef,
+ $package_ensure = undef,
+ $connect_settings = $postgresql::server::default_connect_settings,
+) {
+ $user = $postgresql::server::user
+ $group = $postgresql::server::group
+ $psql_path = $postgresql::server::psql_path
+
+ case $ensure {
+ 'present': {
+ $command = "CREATE EXTENSION \"${extension}\""
+ $unless_comp = '='
+ $package_require = []
+ $package_before = Postgresql_psql["Add ${extension} extension to ${database}"]
+ }
+
+ 'absent': {
+ $command = "DROP EXTENSION \"${extension}\""
+ $unless_comp = '!='
+ $package_require = Postgresql_psql["Add ${extension} extension to ${database}"]
+ $package_before = []
+ }
+
+ default: {
+ fail("Unknown value for ensure '${ensure}'.")
+ }
+ }
+
+
+ postgresql_psql {"Add ${extension} extension to ${database}":
+
+ psql_user => $user,
+ psql_group => $group,
+ psql_path => $psql_path,
+ connect_settings => $connect_settings,
+
+ db => $database,
+ command => $command,
+ unless => "SELECT t.count FROM (SELECT count(extname) FROM pg_extension WHERE extname = '${extension}') as t WHERE t.count ${unless_comp} 1",
+ require => Postgresql::Server::Database[$database],
+ }
+
+ if $package_name {
+ $_package_ensure = $package_ensure ? {
+ undef => $ensure,
+ default => $package_ensure,
+ }
+
+ ensure_packages($package_name, {
+ ensure => $_package_ensure,
+ tag => 'postgresql',
+ require => $package_require,
+ before => $package_before,
+ })
+ }
+}