# # Cookbook Name:: postgresql # Recipe:: config_initdb # Author:: David Crane () # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ####### # Load the locale_date_order() and select_default_timezone(tzdir) # methods from libraries/default.rb ::Chef::Recipe.send(:include, Opscode::PostgresqlHelpers) ####### # This recipe is derived from the setup_config() source code in the # PostgreSQL initdb utility. It determines postgresql.conf settings that # conform to the system's locale and timezone configuration, and also # sets the error reporting and logging settings. # # See http://doxygen.postgresql.org/initdb_8c_source.html for the # original initdb source code. # # By examining the system configuration, this recipe will set the # following node.default['postgresql']['config'] attributes: # # - Locale and Formatting - # * datestyle # * lc_messages # * lc_monetary # * lc_numeric # * lc_time # * default_text_search_config # # - Timezone Conversion - # * log_timezone # * timezone # # In addition, this recipe will recommend the same error reporting and # logging settings that initdb provided. These settings do differ from # the PostgreSQL default settings, which would log to stderr only. The # initdb settings rotate 7 days of log files named postgresql-Mon.log, # etc. through these node.default['postgresql']['config'] attributes: # # - Where to Log - # * log_destination = 'stderr' # * log_directory = 'pg_log' # * log_filename = 'postgresql-%a.log' # (Default was: postgresql-%Y-%m-%d_%H%M%S.log) # * logging_collector = true # on # (Turned on to capture stderr logging and redirect into log files) # (Default was: false # off) # * log_rotation_age = 1d # * log_rotation_size = 0 # (Default was: 10MB) # * log_truncate_on_rotation = true # on # (Default was: false # off) ####### # Locale Configuration # See libraries/default.rb for the locale_date_order() method. node.default['postgresql']['config']['datestyle'] = "iso, #{locale_date_order()}" # According to the locale(1) manpage, the locale settings are determined # by environment variables according to the following precedence: # LC_ALL > (LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME) > LANG. node.default['postgresql']['config']['lc_messages'] = [ ENV['LC_ALL'], ENV['LC_MESSAGES'], ENV['LANG'] ].compact.first node.default['postgresql']['config']['lc_monetary'] = [ ENV['LC_ALL'], ENV['LC_MONETARY'], ENV['LANG'] ].compact.first node.default['postgresql']['config']['lc_numeric'] = [ ENV['LC_ALL'], ENV['LC_NUMERIC'], ENV['LANG'] ].compact.first node.default['postgresql']['config']['lc_time'] = [ ENV['LC_ALL'], ENV['LC_TIME'], ENV['LANG'] ].compact.first node.default['postgresql']['config']['default_text_search_config'] = case ENV['LANG'] when /da_.*/ 'pg_catalog.danish' when /nl_.*/ 'pg_catalog.dutch' when /en_.*/ 'pg_catalog.english' when /fi_.*/ 'pg_catalog.finnish' when /fr_.*/ 'pg_catalog.french' when /de_.*/ 'pg_catalog.german' when /hu_.*/ 'pg_catalog.hungarian' when /it_.*/ 'pg_catalog.italian' when /no_.*/ 'pg_catalog.norwegian' when /pt_.*/ 'pg_catalog.portuguese' when /ro_.*/ 'pg_catalog.romanian' when /ru_.*/ 'pg_catalog.russian' when /es_.*/ 'pg_catalog.spanish' when /sv_.*/ 'pg_catalog.swedish' when /tr_.*/ 'pg_catalog.turkish' else nil end ####### # Timezone Configuration # Determine the name of the system's default timezone and specify node # defaults for the postgresql.cof settings. If the timezone cannot be # identified, do as initdb would do: leave it unspecified so PostgreSQL # uses it's internal default of GMT. tzdirpath = pg_TZDIR() # See libraries/default.rb default_timezone = select_default_timezone(tzdirpath) # See libraries/default.rb if !default_timezone.nil? node.default['postgresql']['config']['log_timezone'] = default_timezone node.default['postgresql']['config']['timezone'] = default_timezone end ####### # - Where to Log - node.default['postgresql']['config']['log_destination'] = 'stderr' node.default['postgresql']['config']['log_directory'] = 'pg_log' node.default['postgresql']['config']['log_filename'] = 'postgresql-%a.log' node.default['postgresql']['config']['logging_collector'] = true # on node.default['postgresql']['config']['log_rotation_age'] = '1d' node.default['postgresql']['config']['log_rotation_size'] = 0 node.default['postgresql']['config']['log_truncate_on_rotation'] = true # on