Skip to content

Commit

Permalink
Allow empty string value for config entries
Browse files Browse the repository at this point in the history
PostgreSQL supports and allows config entries, such as those in
postgresql.conf, to be set to the empty string. The
`postgresql::server::config_entry` defined type, however, requires
String[1] when supplying string values. This doesn't allow for the empty
string.

This change relaxes the allowed data types for the `value` parameter of
`postgresql::server::config_entry` to `String` from `String[1]` and adds
a spec test to support the change.

Fixes #1602
  • Loading branch information
antaflos committed Aug 14, 2024
1 parent 0c66889 commit 6cb0f1f
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 1 deletion.
2 changes: 1 addition & 1 deletion manifests/server/config_entry.pp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
define postgresql::server::config_entry (
Enum['present', 'absent'] $ensure = 'present',
String[1] $key = $name,
Optional[Variant[String[1], Numeric, Array[String[1]]]] $value = undef,
Optional[Variant[String, Numeric, Array[String[1]]]] $value = undef,
Stdlib::Absolutepath $path = $postgresql::server::postgresql_conf_path,
Optional[String[1]] $comment = undef,
String[1] $instance_name = 'main',
Expand Down
15 changes: 15 additions & 0 deletions spec/defines/server/config_entry_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,19 @@
.that_notifies('Postgresql::Server::Instance::Service[main]')
end
end

# Example use case for empty values: using transaction-bound session
# variables, like `SET LOCAL awesome_app.tenant_id = 92834` requires the
# variable to be defined in postgresql.conf and initialised with a default
# value (at least for PostgreSQL 13 and older, possibly also in newer
# versions). The default value can, and sometimes, depending on the
# application, should, be empty.
context 'set a config entry value to the empty string' do
let(:params) { { ensure: 'present', name: 'mydatabase.app_specific_parameter', value: '' } }

it 'sets value to the empty string' do
expect(subject).to contain_postgresql_conf('mydatabase.app_specific_parameter').with(name: 'mydatabase.app_specific_parameter',
value: '')
end
end
end

0 comments on commit 6cb0f1f

Please sign in to comment.