Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Create gh-pages branch via GitHub

  • Loading branch information...
commit aab27a57c2ca2f9402016b7a0ee6a03bbc116302 1 parent d5db5e8
@phlipper authored
Showing with 462 additions and 411 deletions.
  1. +461 −410 index.html
  2. +1 −1  params.json
View
871 index.html
461 additions, 410 deletions not shown
View
2  params.json
@@ -1 +1 @@
-{"name":"chef-postgresql","tagline":"Chef cookbooks for PostgreSQL components ","body":"[![Build Status](http://img.shields.io/travis-ci/phlipper/chef-postgresql.png)](https://travis-ci.org/phlipper/chef-postgresql)\r\n\r\n## Description\r\n\r\nInstalls [PostgreSQL](http://www.postgresql.org), The world's most advanced open source database.\r\n\r\nThis installs postgres 9.x from the [PostgreSQL Apt Repository](https://wiki.postgresql.org/wiki/Apt).\r\n\r\nCurrently supported versions:\r\n\r\n* `9.0`\r\n* `9.1`\r\n* `9.2`\r\n* `9.3`\r\n\r\nThe default version is `9.3`.\r\n\r\n## Requirements\r\n\r\n### Supported Platforms\r\n\r\nThe following platforms are supported by this cookbook, meaning that the recipes run on these platforms without error:\r\n\r\n* Ubuntu 12.04+\r\n* Debian 6+\r\n\r\n### Cookbooks\r\n\r\n* [apt](http://community.opscode.com/cookbooks/apt)\r\n* [minitest-handler](http://community.opscode.com/cookbooks/minitest-handler) _(suggested, not required)_\r\n\r\n\r\n## Recipes\r\n\r\n* `postgresql` - Set up the apt repository and install dependent packages\r\n* `postgresql::apt_repository` - Internal recipe to setup the apt repository\r\n* `postgresql::client` - Front-end programs for PostgreSQL 9.x\r\n* `postgresql::configuration` - Internal recipe to manage configuration files\r\n* `postgresql::contrib` - Additional facilities for PostgreSQL\r\n* `postgresql::data_directory` - Internal recipe to setup the data directory\r\n* `postgresql::dbg` - Debug symbols for the server daemon\r\n* `postgresql::debian_backports` - Internal recipe to manage debian backports\r\n* `postgresql::doc` - Documentation for the PostgreSQL database management system\r\n* `postgresql::libpq` - PostgreSQL C client library and header files for libpq5 (PostgreSQL library)\r\n* `postgresql::pg_database` - Internal recipe to manage specified databases\r\n* `postgresql::pg_user` - Internal recipe to manage specified users\r\n* `postgresql::postgis` - Geographic objects support for PostgreSQL 9.x _(currently Ubuntu only)_\r\n* `postgresql::server` - Object-relational SQL database, version 9.x server\r\n* `postgresql::server_dev` - Development files for PostgreSQL server-side programming\r\n* `postgresql::service` - Internal recipe to declare the system service\r\n\r\n\r\n## Usage\r\n\r\nThis cookbook installs the postgresql components if not present, and pulls updates if they are installed on the system.\r\n\r\nThis cookbook provides three definitions to create, alter, and delete users as well as create and drop databases, or setup extensions. Usage is as follows:\r\n\r\n\r\n### Users\r\n\r\n```ruby\r\n# create a user\r\npg_user \"myuser\" do\r\n privileges superuser: false, replication: false, createdb: false, login: true\r\n password \"mypassword\"\r\nend\r\n\r\n# create a user with an MD5-encrypted password\r\npg_user \"myuser\" do\r\n privileges superuser: false, replication: false, createdb: false, login: true\r\n encrypted_password \"667ff118ef6d196c96313aeaee7da519\"\r\nend\r\n\r\n# drop a user\r\npg_user \"myuser\" do\r\n action :drop\r\nend\r\n```\r\n\r\nOr add users via attributes:\r\n\r\n```json\r\n\"postgresql\": {\r\n \"users\": [\r\n {\r\n \"username\": \"dickeyxxx\",\r\n \"password\": \"password\",\r\n \"superuser\": true,\r\n \"replication\": false,\r\n \"createdb\": true,\r\n \"login\": true\r\n }\r\n ]\r\n}\r\n```\r\n\r\n### Databases and Extensions\r\n\r\n```ruby\r\n# create a database\r\npg_database \"mydb\" do\r\n owner \"myuser\"\r\n encoding \"UTF-8\"\r\n template \"template0\"\r\n locale \"en_US.UTF-8\"\r\nend\r\n\r\n# install extensions to database\r\npg_database_extensions \"mydb\" do\r\n languages \"plpgsql\" # install `plpgsql` language - single value may be passed without array\r\n extensions [\"hstore\", \"dblink\"] # install `hstore` and `dblink` extensions - multiple values in array\r\n postgis true # install `postgis` support\r\nend\r\n\r\n# drop dblink extension\r\npg_database_extensions \"mydb\" do\r\n action :drop\r\n extensions \"dblink\"\r\nend\r\n\r\n# drop a database\r\npg_database \"mydb\" do\r\n action :drop\r\nend\r\n```\r\n\r\nOr add the database via attributes:\r\n\r\n```json\r\n\"postgresql\": {\r\n \"databases\": [\r\n {\r\n \"name\": \"my_db\",\r\n \"owner\": \"dickeyxxx\",\r\n \"template\": \"template0\",\r\n \"encoding\": \"UTF-8\",\r\n \"locale\": \"en_US.UTF-8\",\r\n \"extensions\": \"hstore\"\r\n }\r\n ]\r\n}\r\n```\r\n\r\n### Configuration\r\n\r\nThe `postgresql.conf` configuration may be set one of two ways:\r\n\r\n* set individual node attributes to be interpolated into the default template\r\n* create a custom configuration hash to write a custom file\r\n\r\nTo create a custom configuration, set the `node[\"postgresql\"][\"conf\"]` hash with your custom settings:\r\n\r\n```json\r\n\"postgresql\": {\r\n \"conf\": {\r\n \"data_directory\": \"/dev/null\",\r\n // ... all options explicitly set here\r\n }\r\n}\r\n```\r\n\r\nYou may also set the contents of `pg_hba.conf` via attributes:\r\n\r\n```json\r\n\"postgresql\": {\r\n \"pg_hba\": [\r\n { \"type\": \"local\", \"db\": \"all\", \"user\": \"postgres\", \"addr\": \"\", \"method\": \"ident\" },\r\n { \"type\": \"local\", \"db\": \"all\", \"user\": \"all\", \"addr\": \"\", \"method\": \"trust\" },\r\n { \"type\": \"host\", \"db\": \"all\", \"user\": \"all\", \"addr\": \"127.0.0.1/32\", \"method\": \"trust\" },\r\n { \"type\": \"host\", \"db\": \"all\", \"user\": \"all\", \"addr\": \"::1/128\", \"method\": \"trust\" },\r\n { \"type\": \"host\", \"db\": \"all\", \"user\": \"postgres\", \"addr\": \"127.0.0.1/32\", \"method\": \"trust\" },\r\n { \"type\": \"host\", \"db\": \"all\", \"user\": \"username\", \"addr\": \"127.0.0.1/32\", \"method\": \"trust\" }\r\n ]\r\n}\r\n```\r\n\r\n### Change APT distribution\r\n\r\nCurrently the APT distributions are sourced from [http://apt.postgresql.org/pub/repos/apt/](http://apt.postgresql.org/pub/repos/apt/).\r\nIn some cases this source might not immediately contain a package for the distribution of your target system.\r\n\r\nThe `node[\"postgresql\"][\"apt_distribution\"]` attribute can be used to install PostgreSQL from a different compatible\r\ndistribution:\r\n\r\n```json\r\n\"postgresql\": {\r\n \"apt_distribution\": \"precise\"\r\n}\r\n```\r\n\r\n## Attributes\r\n\r\n```ruby\r\n# WARNING: If this version number is changed in your own recipes, the\r\n# FILE LOCATIONS (see below) attributes *must* also be overridden in\r\n# order to re-compute the paths with the correct version number.\r\ndefault[\"postgresql\"][\"version\"] = \"9.3\"\r\n\r\n# control how the postgres service is signaled when configuration files are\r\n# updated. by default the service is told to `:restart` (stop, start). if you\r\n# run high availability installation and do not want the service to restart via\r\n# chef you can change this to `:reload`. the caveat is that you will need to\r\n# manually restart the postgres server if you change a setting that requires\r\n# a full restart.\r\ndefault[\"postgresql\"][\"cfg_update_action\"] = :restart\r\n\r\n#----------------------------------------------------------------------------\r\n# APT Repository\r\n#----------------------------------------------------------------------------\r\ndefault[\"postgresql\"][\"apt_distribution\"] = node[\"lsb\"][\"codename\"]\r\ndefault[\"postgresql\"][\"apt_repository\"] = \"apt.postgresql.org\"\r\ndefault[\"postgresql\"][\"apt_uri\"] = \"http://apt.postgresql.org/pub/repos/apt\"\r\ndefault[\"postgresql\"][\"apt_components\"] = [\"main\"]\r\ndefault[\"postgresql\"][\"apt_key\"] = \"https://www.postgresql.org/media/keys/ACCC4CF8.asc\"\r\n# You can set default[\"postgresql\"][\"apt_keyserver\"] if you want to use a keyserver\r\n\r\ndefault[\"postgresql\"][\"environment_variables\"] = {}\r\ndefault[\"postgresql\"][\"pg_ctl_options\"] = \"\"\r\ndefault[\"postgresql\"][\"pg_hba\"] = []\r\ndefault[\"postgresql\"][\"pg_hba_defaults\"] = true # Whether to populate the pg_hba.conf with defaults\r\ndefault[\"postgresql\"][\"pg_ident\"] = []\r\ndefault[\"postgresql\"][\"start\"] = \"auto\" # auto, manual, disabled\r\n\r\ndefault[\"postgresql\"][\"conf\"] = {}\r\ndefault[\"postgresql\"][\"conf_custom\"] = false # if true, only use node[\"postgresql\"][\"conf\"]\r\ndefault[\"postgresql\"][\"initdb_options\"] = \"--locale=en_US.UTF-8\"\r\n\r\n#------------------------------------------------------------------------------\r\n# POSTGIS\r\n#------------------------------------------------------------------------------\r\ndefault[\"postgis\"][\"version\"] = \"2.1\"\r\n\r\n#------------------------------------------------------------------------------\r\n# FILE LOCATIONS\r\n#------------------------------------------------------------------------------\r\ndefault[\"postgresql\"][\"data_directory\"] = \"/var/lib/postgresql/#{node[\"postgresql\"][\"version\"]}/main\"\r\ndefault[\"postgresql\"][\"hba_file\"] = \"/etc/postgresql/#{node[\"postgresql\"][\"version\"]}/main/pg_hba.conf\"\r\ndefault[\"postgresql\"][\"ident_file\"] = \"/etc/postgresql/#{node[\"postgresql\"][\"version\"]}/main/pg_ident.conf\"\r\ndefault[\"postgresql\"][\"external_pid_file\"] = \"/var/run/postgresql/#{node[\"postgresql\"][\"version\"]}-main.pid\"\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# CONNECTIONS AND AUTHENTICATION\r\n#------------------------------------------------------------------------------\r\n\r\n# connection settings\r\ndefault[\"postgresql\"][\"listen_addresses\"] = \"localhost\"\r\ndefault[\"postgresql\"][\"port\"] = 5432\r\ndefault[\"postgresql\"][\"max_connections\"] = 100\r\ndefault[\"postgresql\"][\"superuser_reserved_connections\"] = 3\r\ndefault[\"postgresql\"][\"unix_socket_group\"] = \"\"\r\ndefault[\"postgresql\"][\"unix_socket_permissions\"] = \"0777\"\r\ndefault[\"postgresql\"][\"bonjour\"] = \"off\"\r\ndefault[\"postgresql\"][\"bonjour_name\"] = \"\"\r\n\r\nif Gem::Version.new(node[\"postgresql\"][\"version\"]) >= Gem::Version.new(\"9.3\")\r\n default[\"postgresql\"][\"unix_socket_directories\"] = \"/var/run/postgresql\"\r\nelse\r\n default[\"postgresql\"][\"unix_socket_directory\"] = \"/var/run/postgresql\"\r\nend\r\n\r\n# security and authentication\r\ndefault[\"postgresql\"][\"authentication_timeout\"] = \"1min\"\r\ndefault[\"postgresql\"][\"ssl\"] = true\r\ndefault[\"postgresql\"][\"ssl_ciphers\"] = \"ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH\"\r\ndefault[\"postgresql\"][\"ssl_renegotiation_limit\"] = \"512MB\"\r\ndefault[\"postgresql\"][\"ssl_ca_file\"] = \"\"\r\ndefault[\"postgresql\"][\"ssl_cert_file\"] = \"/etc/ssl/certs/ssl-cert-snakeoil.pem\"\r\ndefault[\"postgresql\"][\"ssl_crl_file\"] = \"\"\r\ndefault[\"postgresql\"][\"ssl_key_file\"] = \"/etc/ssl/private/ssl-cert-snakeoil.key\"\r\ndefault[\"postgresql\"][\"password_encryption\"] = \"on\"\r\ndefault[\"postgresql\"][\"db_user_namespace\"] = \"off\"\r\n\r\n# kerberos and gssapi\r\ndefault[\"postgresql\"][\"db_user_namespace\"] = \"off\"\r\ndefault[\"postgresql\"][\"krb_server_keyfile\"] = \"\"\r\ndefault[\"postgresql\"][\"krb_srvname\"] = \"postgres\"\r\ndefault[\"postgresql\"][\"krb_caseins_users\"] = \"off\"\r\n\r\n# tcp keepalives\r\ndefault[\"postgresql\"][\"tcp_keepalives_idle\"] = 0\r\ndefault[\"postgresql\"][\"tcp_keepalives_interval\"] = 0\r\ndefault[\"postgresql\"][\"tcp_keepalives_count\"] = 0\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# RESOURCE USAGE (except WAL)\r\n#------------------------------------------------------------------------------\r\n\r\n# memory\r\ndefault[\"postgresql\"][\"shared_buffers\"] = \"24MB\"\r\ndefault[\"postgresql\"][\"temp_buffers\"] = \"8MB\"\r\ndefault[\"postgresql\"][\"max_prepared_transactions\"] = 0\r\ndefault[\"postgresql\"][\"work_mem\"] = \"1MB\"\r\ndefault[\"postgresql\"][\"maintenance_work_mem\"] = \"16MB\"\r\ndefault[\"postgresql\"][\"max_stack_depth\"] = \"2MB\"\r\n\r\n# kernel resource usage\r\ndefault[\"postgresql\"][\"max_files_per_process\"] = 1000\r\ndefault[\"postgresql\"][\"shared_preload_libraries\"] = \"\"\r\n\r\n# cost-based vacuum delay\r\ndefault[\"postgresql\"][\"vacuum_cost_delay\"] = \"0ms\"\r\ndefault[\"postgresql\"][\"vacuum_cost_page_hit\"] = 1\r\ndefault[\"postgresql\"][\"vacuum_cost_page_miss\"] = 10\r\ndefault[\"postgresql\"][\"vacuum_cost_page_dirty\"] = 20\r\ndefault[\"postgresql\"][\"vacuum_cost_limit\"] = 200\r\n\r\n# background writer\r\ndefault[\"postgresql\"][\"bgwriter_delay\"] = \"200ms\"\r\ndefault[\"postgresql\"][\"bgwriter_lru_maxpages\"] = 100\r\ndefault[\"postgresql\"][\"bgwriter_lru_multiplier\"] = 2.0\r\n\r\n# asynchronous behavior\r\ndefault[\"postgresql\"][\"effective_io_concurrency\"] = 1\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# WRITE AHEAD LOG\r\n#------------------------------------------------------------------------------\r\n\r\n# settings\r\ndefault[\"postgresql\"][\"wal_level\"] = \"minimal\"\r\ndefault[\"postgresql\"][\"fsync\"] = \"on\"\r\ndefault[\"postgresql\"][\"synchronous_commit\"] = \"on\"\r\ndefault[\"postgresql\"][\"wal_sync_method\"] = \"fsync\"\r\ndefault[\"postgresql\"][\"full_page_writes\"] = \"on\"\r\ndefault[\"postgresql\"][\"wal_buffers\"] = -1\r\ndefault[\"postgresql\"][\"wal_writer_delay\"] = \"200ms\"\r\ndefault[\"postgresql\"][\"commit_delay\"] = 0\r\ndefault[\"postgresql\"][\"commit_siblings\"] = 5\r\n\r\n# checkpoints\r\ndefault[\"postgresql\"][\"checkpoint_segments\"] = 3\r\ndefault[\"postgresql\"][\"checkpoint_timeout\"] = \"5min\"\r\ndefault[\"postgresql\"][\"checkpoint_completion_target\"] = 0.5\r\ndefault[\"postgresql\"][\"checkpoint_warning\"] = \"30s\"\r\n\r\n# archiving\r\ndefault[\"postgresql\"][\"archive_mode\"] = \"off\"\r\ndefault[\"postgresql\"][\"archive_command\"] = \"\"\r\ndefault[\"postgresql\"][\"archive_timeout\"] = 0\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# REPLICATION\r\n#------------------------------------------------------------------------------\r\n\r\n# master server\r\ndefault[\"postgresql\"][\"max_wal_senders\"] = 0\r\ndefault[\"postgresql\"][\"wal_sender_delay\"] = \"1s\"\r\ndefault[\"postgresql\"][\"wal_keep_segments\"] = 0\r\ndefault[\"postgresql\"][\"vacuum_defer_cleanup_age\"] = 0\r\ndefault[\"postgresql\"][\"replication_timeout\"] = \"60s\"\r\ndefault[\"postgresql\"][\"synchronous_standby_names\"] = \"\"\r\n\r\n# standby servers\r\ndefault[\"postgresql\"][\"hot_standby\"] = \"off\"\r\ndefault[\"postgresql\"][\"max_standby_archive_delay\"] = \"30s\"\r\ndefault[\"postgresql\"][\"max_standby_streaming_delay\"] = \"30s\"\r\ndefault[\"postgresql\"][\"wal_receiver_status_interval\"] = \"10s\"\r\ndefault[\"postgresql\"][\"hot_standby_feedback\"] = \"off\"\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# QUERY TUNING\r\n#------------------------------------------------------------------------------\r\n\r\n# planner method configuration\r\ndefault[\"postgresql\"][\"enable_bitmapscan\"] = \"on\"\r\ndefault[\"postgresql\"][\"enable_hashagg\"] = \"on\"\r\ndefault[\"postgresql\"][\"enable_hashjoin\"] = \"on\"\r\ndefault[\"postgresql\"][\"enable_indexscan\"] = \"on\"\r\ndefault[\"postgresql\"][\"enable_material\"] = \"on\"\r\ndefault[\"postgresql\"][\"enable_mergejoin\"] = \"on\"\r\ndefault[\"postgresql\"][\"enable_nestloop\"] = \"on\"\r\ndefault[\"postgresql\"][\"enable_seqscan\"] = \"on\"\r\ndefault[\"postgresql\"][\"enable_sort\"] = \"on\"\r\ndefault[\"postgresql\"][\"enable_tidscan\"] = \"on\"\r\n\r\n# planner cost constants\r\ndefault[\"postgresql\"][\"seq_page_cost\"] = 1.0\r\ndefault[\"postgresql\"][\"random_page_cost\"] = 4.0\r\ndefault[\"postgresql\"][\"cpu_tuple_cost\"] = 0.01\r\ndefault[\"postgresql\"][\"cpu_index_tuple_cost\"] = 0.005\r\ndefault[\"postgresql\"][\"cpu_operator_cost\"] = 0.0025\r\ndefault[\"postgresql\"][\"effective_cache_size\"] = \"128MB\"\r\n\r\n# genetic query optimizer\r\ndefault[\"postgresql\"][\"geqo\"] = \"on\"\r\ndefault[\"postgresql\"][\"geqo_threshold\"] = 12\r\ndefault[\"postgresql\"][\"geqo_effort\"] = 5\r\ndefault[\"postgresql\"][\"geqo_pool_size\"] = 0\r\ndefault[\"postgresql\"][\"geqo_generations\"] = 0\r\ndefault[\"postgresql\"][\"geqo_selection_bias\"] = 2.0\r\ndefault[\"postgresql\"][\"geqo_seed\"] = 0.0\r\n\r\n# other planner options\r\ndefault[\"postgresql\"][\"default_statistics_target\"] = 100\r\ndefault[\"postgresql\"][\"constraint_exclusion\"] = \"partition\"\r\ndefault[\"postgresql\"][\"cursor_tuple_fraction\"] = 0.1\r\ndefault[\"postgresql\"][\"from_collapse_limit\"] = 8\r\ndefault[\"postgresql\"][\"join_collapse_limit\"] = 8\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# ERROR REPORTING AND LOGGING\r\n#------------------------------------------------------------------------------\r\n\r\n# where to log\r\ndefault[\"postgresql\"][\"log_destination\"] = \"stderr\"\r\ndefault[\"postgresql\"][\"logging_collector\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_directory\"] = \"pg_log\"\r\ndefault[\"postgresql\"][\"log_filename\"] = \"postgresql-%Y-%m-%d_%H%M%S.log\"\r\ndefault[\"postgresql\"][\"log_file_mode\"] = 0600\r\ndefault[\"postgresql\"][\"log_truncate_on_rotation\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_rotation_age\"] = \"1d\"\r\ndefault[\"postgresql\"][\"log_rotation_size\"] = \"10MB\"\r\n\r\n# These are relevant when logging to syslog:\r\ndefault[\"postgresql\"][\"syslog_facility\"] = \"LOCAL0\"\r\ndefault[\"postgresql\"][\"syslog_ident\"] = \"postgres\"\r\ndefault[\"postgresql\"][\"silent_mode\"] = \"off\"\r\n\r\n# when to log\r\ndefault[\"postgresql\"][\"client_min_messages\"] = \"notice\"\r\ndefault[\"postgresql\"][\"log_min_messages\"] = \"warning\"\r\ndefault[\"postgresql\"][\"log_min_error_statement\"] = \"error\"\r\ndefault[\"postgresql\"][\"log_min_duration_statement\"] = -1\r\n\r\n# what to log\r\ndefault[\"postgresql\"][\"debug_print_parse\"] = \"off\"\r\ndefault[\"postgresql\"][\"debug_print_rewritten\"] = \"off\"\r\ndefault[\"postgresql\"][\"debug_print_plan\"] = \"off\"\r\ndefault[\"postgresql\"][\"debug_pretty_print\"] = \"on\"\r\ndefault[\"postgresql\"][\"log_checkpoints\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_connections\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_disconnections\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_duration\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_error_verbosity\"] = \"default\"\r\ndefault[\"postgresql\"][\"log_hostname\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_line_prefix\"] = \"%t \"\r\ndefault[\"postgresql\"][\"log_lock_waits\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_statement\"] = \"none\"\r\ndefault[\"postgresql\"][\"log_temp_files\"] = -1\r\ndefault[\"postgresql\"][\"log_timezone\"] = \"(defaults to server environment setting)\"\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# RUNTIME STATISTICS\r\n#------------------------------------------------------------------------------\r\n\r\n# query/index statistics collector\r\ndefault[\"postgresql\"][\"track_activities\"] = \"on\"\r\ndefault[\"postgresql\"][\"track_counts\"] = \"on\"\r\ndefault[\"postgresql\"][\"track_functions\"] = \"none\"\r\ndefault[\"postgresql\"][\"track_activity_query_size\"] = 1024\r\ndefault[\"postgresql\"][\"update_process_title\"] = \"on\"\r\ndefault[\"postgresql\"][\"stats_temp_directory\"] = 'pg_stat_tmp'\r\n\r\n# statistics monitoring\r\ndefault[\"postgresql\"][\"log_parser_stats\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_planner_stats\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_executor_stats\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_statement_stats\"] = \"off\"\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# AUTOVACUUM PARAMETERS\r\n#------------------------------------------------------------------------------\r\n\r\ndefault[\"postgresql\"][\"autovacuum\"] = \"on\"\r\ndefault[\"postgresql\"][\"log_autovacuum_min_duration\"] = -1\r\ndefault[\"postgresql\"][\"autovacuum_max_workers\"] = 3\r\ndefault[\"postgresql\"][\"autovacuum_naptime\"] = \"1min\"\r\ndefault[\"postgresql\"][\"autovacuum_vacuum_threshold\"] = 50\r\ndefault[\"postgresql\"][\"autovacuum_analyze_threshold\"] = 50\r\ndefault[\"postgresql\"][\"autovacuum_vacuum_scale_factor\"] = 0.2\r\ndefault[\"postgresql\"][\"autovacuum_analyze_scale_factor\"] = 0.1\r\ndefault[\"postgresql\"][\"autovacuum_freeze_max_age\"] = 200000000\r\ndefault[\"postgresql\"][\"autovacuum_vacuum_cost_delay\"] = \"20ms\"\r\ndefault[\"postgresql\"][\"autovacuum_vacuum_cost_limit\"] = -1\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# CLIENT CONNECTION DEFAULTS\r\n#------------------------------------------------------------------------------\r\n\r\n# statement behavior\r\ndefault[\"postgresql\"][\"search_path\"] = '\"$user\",public'\r\ndefault[\"postgresql\"][\"default_tablespace\"] = \"\"\r\ndefault[\"postgresql\"][\"temp_tablespaces\"] = \"\"\r\ndefault[\"postgresql\"][\"check_function_bodies\"] = \"on\"\r\ndefault[\"postgresql\"][\"default_transaction_isolation\"] = \"read committed\"\r\ndefault[\"postgresql\"][\"default_transaction_read_only\"] = \"off\"\r\ndefault[\"postgresql\"][\"default_transaction_deferrable\"] = \"off\"\r\ndefault[\"postgresql\"][\"session_replication_role\"] = \"origin\"\r\ndefault[\"postgresql\"][\"statement_timeout\"] = 0\r\ndefault[\"postgresql\"][\"vacuum_freeze_min_age\"] = 50000000\r\ndefault[\"postgresql\"][\"vacuum_freeze_table_age\"] = 150000000\r\ndefault[\"postgresql\"][\"bytea_output\"] = \"hex\"\r\ndefault[\"postgresql\"][\"xmlbinary\"] = \"base64\"\r\ndefault[\"postgresql\"][\"xmloption\"] = \"content\"\r\n\r\n# locale and formatting\r\ndefault[\"postgresql\"][\"datestyle\"] = \"iso, mdy\"\r\ndefault[\"postgresql\"][\"intervalstyle\"] = \"postgres\"\r\ndefault[\"postgresql\"][\"timezone\"] = \"(defaults to server environment setting)\"\r\ndefault[\"postgresql\"][\"timezone_abbreviations\"] = \"Default\"\r\ndefault[\"postgresql\"][\"extra_float_digits\"] = 0\r\ndefault[\"postgresql\"][\"client_encoding\"] = \"sql_ascii\"\r\n\r\n# These settings are initialized by initdb, but they can be changed.\r\ndefault[\"postgresql\"][\"lc_messages\"] = \"en_US.UTF-8\"\r\ndefault[\"postgresql\"][\"lc_monetary\"] = \"en_US.UTF-8\"\r\ndefault[\"postgresql\"][\"lc_numeric\"] = \"en_US.UTF-8\"\r\ndefault[\"postgresql\"][\"lc_time\"] = \"en_US.UTF-8\"\r\n\r\n# default configuration for text search\r\ndefault[\"postgresql\"][\"default_text_search_config\"] = \"pg_catalog.english\"\r\n\r\n# other defaults\r\ndefault[\"postgresql\"][\"dynamic_library_path\"] = \"$libdir\"\r\ndefault[\"postgresql\"][\"local_preload_libraries\"] = \"\"\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# LOCK MANAGEMENT\r\n#------------------------------------------------------------------------------\r\n\r\ndefault[\"postgresql\"][\"deadlock_timeout\"] = \"1s\"\r\ndefault[\"postgresql\"][\"max_locks_per_transaction\"] = 64\r\ndefault[\"postgresql\"][\"max_pred_locks_per_transaction\"] = 64\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# VERSION/PLATFORM COMPATIBILITY\r\n#------------------------------------------------------------------------------\r\n\r\n# previous postgresql versions\r\ndefault[\"postgresql\"][\"array_nulls\"] = \"on\"\r\ndefault[\"postgresql\"][\"backslash_quote\"] = \"safe_encoding\"\r\ndefault[\"postgresql\"][\"default_with_oids\"] = \"off\"\r\ndefault[\"postgresql\"][\"escape_string_warning\"] = \"on\"\r\ndefault[\"postgresql\"][\"lo_compat_privileges\"] = \"off\"\r\ndefault[\"postgresql\"][\"quote_all_identifiers\"] = \"off\"\r\ndefault[\"postgresql\"][\"sql_inheritance\"] = \"on\"\r\ndefault[\"postgresql\"][\"standard_conforming_strings\"] = \"on\"\r\ndefault[\"postgresql\"][\"synchronize_seqscans\"] = \"on\"\r\n\r\n# other platforms and clients\r\ndefault[\"postgresql\"][\"transform_null_equals\"] = \"off\"\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# ERROR HANDLING\r\n#------------------------------------------------------------------------------\r\n\r\ndefault[\"postgresql\"][\"exit_on_error\"] = \"off\"\r\ndefault[\"postgresql\"][\"restart_after_crash\"] = \"on\"\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# USERS AND DATABASES\r\n#------------------------------------------------------------------------------\r\n\r\ndefault[\"postgresql\"][\"users\"] = []\r\ndefault[\"postgresql\"][\"databases\"] = []\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# CUSTOMIZED OPTIONS\r\n#------------------------------------------------------------------------------\r\n\r\ndefault[\"postgresql\"][\"custom_variable_classes\"] = \"\"\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# POSTGIS OPTIONS\r\n#------------------------------------------------------------------------------\r\n\r\ndefault[\"postgis\"][\"version\"] = \"2.0\"\r\n```\r\n\r\n\r\n## TODO\r\n\r\n* Add support for replication setup\r\n* Add installation and configuration for the following packages:\r\n\r\n```\r\npostgresql-{version}-ip4r\r\npostgresql-{version}-pgq3\r\npostgresql-{version}-plsh\r\npostgresql-{version}-pgmp\r\npostgresql-{version}-plproxy\r\npostgresql-{version}-plv8\r\npostgresql-{version}-repmgr\r\npostgresql-{version}-debversion\r\npostgresql-{version}-pgpool2\r\npostgresql-{version}-plr\r\npostgresql-{version}-slony1-2\r\n```\r\n\r\n\r\n## Contributing\r\n\r\n1. Fork it\r\n2. Create your feature branch (`git checkout -b my-new-feature`)\r\n3. Commit your changes (`git commit -am 'Added some feature'`)\r\n4. Push to the branch (`git push origin my-new-feature`)\r\n5. Create new Pull Request\r\n\r\n\r\n## Contributors\r\n\r\nMany thanks go to the following who have contributed to making this cookbook even better:\r\n\r\n* **[@flashingpumpkin](https://github.com/flashingpumpkin)**\r\n * recipe bugfixes\r\n * add `pg_user` and `pg_database` definitions\r\n* **[@cmer](https://github.com/cmer)**\r\n * add `encrypted_password` param for `pg_user` definition\r\n* **[@dickeyxxx](https://github.com/dickeyxxx)**\r\n * speed up recipe loading and execution\r\n * add support for specifying database locale\r\n * add support for adding users and databases via attributes\r\n* **[@alno](https://github.com/alno)**\r\n * add support to install additional languages/extensions/postgis to existing databases\r\n * add `pg_database_extensions` definition\r\n* **[@ermolaev](https://github.com/ermolaev)**\r\n * improve platform check for source repo\r\n * support debian 7 (wheezy)\r\n* **[@escobera](https://github.com/escobera)**\r\n * fix for missing ssl directives in `postgresql.conf`\r\n* **[@cdoughty77](https://github.com/cdoughty77)**\r\n * allow finer tuning inside pg_hba.conf file\r\n* **[@NOX73](https://github.com/NOX73)**\r\n * fix `postgresql.conf` ssl parameter failure on 9.1\r\n* **[@navinpeiris](https://github.com/navinpeiris)**\r\n * add ability to configure apt distribution\r\n* **[@michihuber](https://github.com/michihuber)**\r\n * create data/config dirs recursively\r\n* **[@sethcall](https://github.com/sethcall)**\r\n * allow 'lazy' evaluation of configs in the custom template\r\n* **[@jherdman](https://github.com/jherdman)**\r\n * update README to include updated apt repository link\r\n * add support for version 9.3\r\n* **[@stianselland](https://github.com/stianselland)**\r\n * fix idempotence for `pg_user` definition\r\n* **[@alenia](https://github.com/alenia)**\r\n * conditionally override attributes in `postgresql.conf`\r\n * support for customizable apt sources\r\n * add ability to use an apt keyserver\r\n* **[@Randommood](https://github.com/Randommood)**\r\n * conditionally override attributes in `postgresql.conf`\r\n * support for customizable apt sources\r\n * add ability to use an apt keyserver\r\n* **[@vrischmann](https://github.com/vrischmann)**\r\n * uncomment `wal_writer_delay` attribute\r\n* **[@brainopia](https://github.com/brainopia)**\r\n * support `encrypted_password` in the `pg_user` recipe\r\n* **[@tpitale](https://github.com/tpitale)**\r\n * update example encoding/locales in README to fix error\r\n* **[@seamusabshere](https://github.com/seamusabshere)**\r\n * uncomment various configuration settings\r\n * uncomment more configuration settings\r\n * uncomment `commit_delay` and `temp_buffers` settings\r\n * uncomment `random_page_cost` and `seq_page_cost` settings\r\n* **[@RichardWigley](https://github.com/RichardWigley)**\r\n * fix empty password causes exception\r\n* **[@phumpal](https://github.com/phumpal)**\r\n * update `default[\"postgresql\"][\"apt_key\"]` to new location\r\n* **[@mjallday](https://github.com/mjallday)**\r\n * allow controlling how to restart postgres\r\n* **[@cgunther](https://github.com/cgunther)**\r\n * uncomment `log_filename` attribute\r\n* **[@rosenfeld](https://github.com/rosenfeld)**\r\n * ensure proper database is selected in `pg_database` definition\r\n* **[@j-martin](https://github.com/j-martin)**\r\n * ensure proper quoting of role name in `pg_user` definition\r\n* **[@helgi](https://github.com/helgi)**\r\n * add replication mode to `pg_user` definition\r\n\r\n\r\n## License\r\n\r\n**chef-postgresql**\r\n\r\n* Freely distributable and licensed under the [MIT license](http://phlipper.mit-license.org/2012-2014/license.html).\r\n* Copyright (c) 2012-2014 Phil Cohen (github@phlippers.net) [![endorse](http://api.coderwall.com/phlipper/endorsecount.png)](http://coderwall.com/phlipper) [![Gittip](http://img.shields.io/gittip/phlipper.png)](https://www.gittip.com/phlipper/)\r\n* http://phlippers.net/\r\n","google":"UA-10172882-2","note":"Don't delete this file! It's used internally to help with page regeneration."}
+{"name":"chef-postgresql","tagline":"Chef cookbooks for PostgreSQL components ","body":"## Flair\r\n\r\n![Cookbook Version](https://img.shields.io/badge/cookbook-0.16.1-blue.svg)\r\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](http://phlipper.mit-license.org/2012-2015/license.html)\r\n[![Build Status](http://img.shields.io/travis-ci/phlipper/chef-postgresql.png)](https://travis-ci.org/phlipper/chef-postgresql)\r\n[![Gitter](https://img.shields.io/badge/Gitter%2Eim-Join_Chat_→-yellow.svg)](https://gitter.im/phlipper/chef-postgresql)\r\n![It Works On My Machine™](https://img.shields.io/badge/It_Works-On_My_Machine%E2%84%A2-orange.svg)\r\n[![Tip](http://img.shields.io/gratipay/phlipper.png)](https://gratipay.com/phlipper/)\r\n[![Endorse](http://api.coderwall.com/phlipper/endorsecount.png)](http://coderwall.com/phlipper)\r\n\r\n## Description\r\n\r\nInstalls [PostgreSQL](http://www.postgresql.org), The world's most advanced open source database.\r\n\r\nThis installs postgres 9.x from the [PostgreSQL Apt Repository](https://wiki.postgresql.org/wiki/Apt).\r\n\r\nCurrently supported versions:\r\n\r\n* `9.0`\r\n* `9.1`\r\n* `9.2`\r\n* `9.3`\r\n* `9.4`\r\n\r\nThe default version is `9.4`.\r\n\r\n## Requirements\r\n\r\n### Supported Platforms\r\n\r\nThe following platforms are supported by this cookbook, meaning that the recipes run on these platforms without error:\r\n\r\n* Ubuntu 12.04+\r\n* Debian 6+\r\n\r\n### Chef\r\n\r\nThis cookbook requires Chef >= 11.13 due to the use of the `sensitive` attribute for some resources.\r\n\r\n### Cookbooks\r\n\r\n* [apt](http://community.opscode.com/cookbooks/apt)\r\n* [minitest-handler](http://community.opscode.com/cookbooks/minitest-handler) _(suggested, not required)_\r\n\r\n\r\n## Recipes\r\n\r\n* `postgresql` - Set up the apt repository and install dependent packages\r\n* `postgresql::apt_repository` - Internal recipe to setup the apt repository\r\n* `postgresql::client` - Front-end programs for PostgreSQL 9.x\r\n* `postgresql::configuration` - Internal recipe to manage configuration files\r\n* `postgresql::contrib` - Additional facilities for PostgreSQL\r\n* `postgresql::data_directory` - Internal recipe to setup the data directory\r\n* `postgresql::dbg` - Debug symbols for the server daemon\r\n* `postgresql::debian_backports` - Internal recipe to manage debian backports\r\n* `postgresql::doc` - Documentation for the PostgreSQL database management system\r\n* `postgresql::libpq` - PostgreSQL C client library and header files for libpq5 (PostgreSQL library)\r\n* `postgresql::postgis` - Geographic objects support for PostgreSQL 9.x _(currently Ubuntu only)_\r\n* `postgresql::server` - Object-relational SQL database, version 9.x server\r\n* `postgresql::server_dev` - Development files for PostgreSQL server-side programming\r\n* `postgresql::service` - Internal recipe to declare the system service\r\n* `postgresql::setup_databases` - Internal recipe to manage specified databases\r\n* `postgresql::setup_extensions` - Internal recipe to manage specified database extensions\r\n* `postgresql::setup_languages` - Internal recipe to manage specified database languages\r\n* `postgresql::setup_users` - Internal recipe to manage specified users\r\n\r\n\r\n## Usage\r\n\r\nThis cookbook installs the postgresql components if not present, and pulls updates if they are installed on the system.\r\n\r\nThis cookbook provides three definitions to create, alter, and delete users as well as create and drop databases, or setup extensions. Usage is as follows:\r\n\r\n\r\n### Users\r\n\r\n```ruby\r\n# create a user\r\npostgresql_user \"myuser\" do\r\n superuser false\r\n createdb false\r\n login true\r\n replication false\r\n password \"mypassword\"\r\nend\r\n\r\n# create a user with an MD5-encrypted password\r\npostgresql_user \"myuser\" do\r\n superuser false\r\n createdb false\r\n login true\r\n replication false\r\n encrypted_password \"667ff118ef6d196c96313aeaee7da519\"\r\nend\r\n\r\n# drop a user\r\npostgresql_user \"myuser\" do\r\n action :drop\r\nend\r\n```\r\n\r\nOr add users via attributes:\r\n\r\n```json\r\n\"postgresql\": {\r\n \"users\": [\r\n {\r\n \"username\": \"dickeyxxx\",\r\n \"password\": \"password\",\r\n \"superuser\": true,\r\n \"replication\": false,\r\n \"createdb\": true,\r\n \"createrole\": false,\r\n \"inherit\": true,\r\n \"replication\": false,\r\n \"login\": true\r\n }\r\n ]\r\n}\r\n```\r\n\r\n### Databases and Extensions\r\n\r\n```ruby\r\n# create a database\r\npostgresql_database \"mydb\" do\r\n owner \"myuser\"\r\n encoding \"UTF-8\"\r\n template \"template0\"\r\n locale \"en_US.UTF-8\"\r\nend\r\n\r\n# install extensions to database\r\npostgresql_extension \"hstore\" do\r\n database \"mydb\"\r\nend\r\n\r\npostgresql_language \"plpgsql\" do\r\n database \"mydb\"\r\nend\r\n\r\n# drop dblink extension\r\npostgresql_extension \"dblink\" do\r\n database \"mydb\"\r\n action :drop\r\nend\r\n\r\n# drop a database\r\npostgresql_database \"mydb\" do\r\n action :drop\r\nend\r\n```\r\n\r\nOr add the database via attributes:\r\n\r\n```json\r\n\"postgresql\": {\r\n \"databases\": [\r\n {\r\n \"name\": \"my_db\",\r\n \"owner\": \"dickeyxxx\",\r\n \"template\": \"template0\",\r\n \"encoding\": \"UTF-8\",\r\n \"locale\": \"en_US.UTF-8\",\r\n \"extensions\": [\"hstore\", \"dblink\"],\r\n \"postgis\": true\r\n }\r\n ]\r\n}\r\n```\r\n\r\n### Configuration\r\n\r\nThe `postgresql.conf` configuration may be set one of two ways:\r\n\r\n* set individual node attributes to be interpolated into the default template\r\n* create a custom configuration hash to write a custom file\r\n\r\nTo create a custom configuration, set the `node[\"postgresql\"][\"conf\"]` hash with your custom settings:\r\n\r\n```json\r\n\"postgresql\": {\r\n \"conf\": {\r\n \"data_directory\": \"/dev/null\",\r\n // ... all options explicitly set here\r\n }\r\n}\r\n```\r\n\r\nYou may also set the contents of `pg_hba.conf` via attributes:\r\n\r\n```json\r\n\"postgresql\": {\r\n \"pg_hba\": [\r\n { \"type\": \"local\", \"db\": \"all\", \"user\": \"postgres\", \"addr\": \"\", \"method\": \"ident\" },\r\n { \"type\": \"local\", \"db\": \"all\", \"user\": \"all\", \"addr\": \"\", \"method\": \"trust\" },\r\n { \"type\": \"host\", \"db\": \"all\", \"user\": \"all\", \"addr\": \"127.0.0.1/32\", \"method\": \"trust\" },\r\n { \"type\": \"host\", \"db\": \"all\", \"user\": \"all\", \"addr\": \"::1/128\", \"method\": \"trust\" },\r\n { \"type\": \"host\", \"db\": \"all\", \"user\": \"postgres\", \"addr\": \"127.0.0.1/32\", \"method\": \"trust\" },\r\n { \"type\": \"host\", \"db\": \"all\", \"user\": \"username\", \"addr\": \"127.0.0.1/32\", \"method\": \"trust\" }\r\n ]\r\n}\r\n```\r\n\r\n### Change APT distribution\r\n\r\nCurrently the APT distributions are sourced from [http://apt.postgresql.org/pub/repos/apt/](http://apt.postgresql.org/pub/repos/apt/).\r\nIn some cases this source might not immediately contain a package for the distribution of your target system.\r\n\r\nThe `node[\"postgresql\"][\"apt_distribution\"]` attribute can be used to install PostgreSQL from a different compatible\r\ndistribution:\r\n\r\n```json\r\n\"postgresql\": {\r\n \"apt_distribution\": \"precise\"\r\n}\r\n```\r\n\r\n## Attributes\r\n\r\n```ruby\r\n# WARNING: If this version number is changed in your own recipes, the\r\n# FILE LOCATIONS (see below) attributes *must* also be overridden in\r\n# order to re-compute the paths with the correct version number.\r\ndefault[\"postgresql\"][\"version\"] = \"9.4\"\r\n\r\n#----------------------------------------------------------------------------\r\n# DAEMON CONTROL\r\n#----------------------------------------------------------------------------\r\ndefault[\"postgresql\"][\"service_actions\"] = %w[enable start]\r\n\r\n# control how the postgres service is signaled when configuration files are\r\n# updated. by default the service is told to `:restart` (stop, start). if you\r\n# run high availability installation and do not want the service to restart via\r\n# chef you can change this to `:reload`. the caveat is that you will need to\r\n# manually restart the postgres server if you change a setting that requires\r\n# a full restart.\r\ndefault[\"postgresql\"][\"cfg_update_action\"] = :restart\r\n\r\n#----------------------------------------------------------------------------\r\n# APT REPOSITORY\r\n#----------------------------------------------------------------------------\r\ndefault[\"postgresql\"][\"apt_distribution\"] = node[\"lsb\"][\"codename\"]\r\ndefault[\"postgresql\"][\"apt_repository\"] = \"apt.postgresql.org\"\r\ndefault[\"postgresql\"][\"apt_uri\"] = \"http://apt.postgresql.org/pub/repos/apt\"\r\ndefault[\"postgresql\"][\"apt_components\"] = [\"main\"]\r\ndefault[\"postgresql\"][\"apt_key\"] = \"https://www.postgresql.org/media/keys/ACCC4CF8.asc\"\r\n# You can set default[\"postgresql\"][\"apt_keyserver\"] if you want to use a keyserver\r\n\r\ndefault[\"postgresql\"][\"environment_variables\"] = {}\r\ndefault[\"postgresql\"][\"pg_ctl_options\"] = \"\"\r\ndefault[\"postgresql\"][\"pg_hba\"] = []\r\ndefault[\"postgresql\"][\"pg_hba_defaults\"] = true # Whether to populate the pg_hba.conf with defaults\r\ndefault[\"postgresql\"][\"pg_ident\"] = []\r\ndefault[\"postgresql\"][\"start\"] = \"auto\" # auto, manual, disabled\r\n\r\ndefault[\"postgresql\"][\"conf\"] = {}\r\ndefault[\"postgresql\"][\"conf_custom\"] = false # if true, only use node[\"postgresql\"][\"conf\"]\r\ndefault[\"postgresql\"][\"initdb_options\"] = \"--locale=en_US.UTF-8\"\r\n\r\n#------------------------------------------------------------------------------\r\n# POSTGIS\r\n#------------------------------------------------------------------------------\r\ndefault[\"postgis\"][\"version\"] = \"2.1\"\r\n\r\n#------------------------------------------------------------------------------\r\n# FILE LOCATIONS\r\n#------------------------------------------------------------------------------\r\ndefault[\"postgresql\"][\"data_directory\"] = \"/var/lib/postgresql/#{node[\"postgresql\"][\"version\"]}/main\"\r\ndefault[\"postgresql\"][\"hba_file\"] = \"/etc/postgresql/#{node[\"postgresql\"][\"version\"]}/main/pg_hba.conf\"\r\ndefault[\"postgresql\"][\"ident_file\"] = \"/etc/postgresql/#{node[\"postgresql\"][\"version\"]}/main/pg_ident.conf\"\r\ndefault[\"postgresql\"][\"external_pid_file\"] = \"/var/run/postgresql/#{node[\"postgresql\"][\"version\"]}-main.pid\"\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# CONNECTIONS AND AUTHENTICATION\r\n#------------------------------------------------------------------------------\r\n\r\n# connection settings\r\ndefault[\"postgresql\"][\"listen_addresses\"] = \"localhost\"\r\ndefault[\"postgresql\"][\"port\"] = 5432\r\ndefault[\"postgresql\"][\"max_connections\"] = 100\r\ndefault[\"postgresql\"][\"superuser_reserved_connections\"] = 3\r\ndefault[\"postgresql\"][\"unix_socket_group\"] = \"\"\r\ndefault[\"postgresql\"][\"unix_socket_permissions\"] = \"0777\"\r\ndefault[\"postgresql\"][\"bonjour\"] = \"off\"\r\ndefault[\"postgresql\"][\"bonjour_name\"] = \"\"\r\n\r\nif Gem::Version.new(node[\"postgresql\"][\"version\"]) >= Gem::Version.new(\"9.3\")\r\n default[\"postgresql\"][\"unix_socket_directories\"] = \"/var/run/postgresql\"\r\nelse\r\n default[\"postgresql\"][\"unix_socket_directory\"] = \"/var/run/postgresql\"\r\nend\r\n\r\n# security and authentication\r\ndefault[\"postgresql\"][\"authentication_timeout\"] = \"1min\"\r\ndefault[\"postgresql\"][\"ssl\"] = true\r\ndefault[\"postgresql\"][\"ssl_ciphers\"] = \"ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH\"\r\ndefault[\"postgresql\"][\"ssl_renegotiation_limit\"] = \"512MB\"\r\ndefault[\"postgresql\"][\"ssl_ca_file\"] = \"\"\r\ndefault[\"postgresql\"][\"ssl_cert_file\"] = \"/etc/ssl/certs/ssl-cert-snakeoil.pem\"\r\ndefault[\"postgresql\"][\"ssl_crl_file\"] = \"\"\r\ndefault[\"postgresql\"][\"ssl_key_file\"] = \"/etc/ssl/private/ssl-cert-snakeoil.key\"\r\ndefault[\"postgresql\"][\"password_encryption\"] = \"on\"\r\ndefault[\"postgresql\"][\"db_user_namespace\"] = \"off\"\r\n\r\n# kerberos and gssapi\r\ndefault[\"postgresql\"][\"db_user_namespace\"] = \"off\"\r\ndefault[\"postgresql\"][\"krb_server_keyfile\"] = \"\"\r\ndefault[\"postgresql\"][\"krb_srvname\"] = \"postgres\"\r\ndefault[\"postgresql\"][\"krb_caseins_users\"] = \"off\"\r\n\r\n# tcp keepalives\r\ndefault[\"postgresql\"][\"tcp_keepalives_idle\"] = 0\r\ndefault[\"postgresql\"][\"tcp_keepalives_interval\"] = 0\r\ndefault[\"postgresql\"][\"tcp_keepalives_count\"] = 0\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# RESOURCE USAGE (except WAL)\r\n#------------------------------------------------------------------------------\r\n\r\n# memory\r\ndefault[\"postgresql\"][\"shared_buffers\"] = \"24MB\"\r\ndefault[\"postgresql\"][\"temp_buffers\"] = \"8MB\"\r\ndefault[\"postgresql\"][\"max_prepared_transactions\"] = 0\r\ndefault[\"postgresql\"][\"work_mem\"] = \"1MB\"\r\ndefault[\"postgresql\"][\"maintenance_work_mem\"] = \"16MB\"\r\ndefault[\"postgresql\"][\"max_stack_depth\"] = \"2MB\"\r\n\r\n# kernel resource usage\r\ndefault[\"postgresql\"][\"max_files_per_process\"] = 1000\r\ndefault[\"postgresql\"][\"shared_preload_libraries\"] = \"\"\r\n\r\n# cost-based vacuum delay\r\ndefault[\"postgresql\"][\"vacuum_cost_delay\"] = \"0ms\"\r\ndefault[\"postgresql\"][\"vacuum_cost_page_hit\"] = 1\r\ndefault[\"postgresql\"][\"vacuum_cost_page_miss\"] = 10\r\ndefault[\"postgresql\"][\"vacuum_cost_page_dirty\"] = 20\r\ndefault[\"postgresql\"][\"vacuum_cost_limit\"] = 200\r\n\r\n# background writer\r\ndefault[\"postgresql\"][\"bgwriter_delay\"] = \"200ms\"\r\ndefault[\"postgresql\"][\"bgwriter_lru_maxpages\"] = 100\r\ndefault[\"postgresql\"][\"bgwriter_lru_multiplier\"] = 2.0\r\n\r\n# asynchronous behavior\r\ndefault[\"postgresql\"][\"effective_io_concurrency\"] = 1\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# WRITE AHEAD LOG\r\n#------------------------------------------------------------------------------\r\n\r\n# settings\r\ndefault[\"postgresql\"][\"wal_level\"] = \"minimal\"\r\ndefault[\"postgresql\"][\"fsync\"] = \"on\"\r\ndefault[\"postgresql\"][\"synchronous_commit\"] = \"on\"\r\ndefault[\"postgresql\"][\"wal_sync_method\"] = \"fsync\"\r\ndefault[\"postgresql\"][\"full_page_writes\"] = \"on\"\r\ndefault[\"postgresql\"][\"wal_buffers\"] = -1\r\ndefault[\"postgresql\"][\"wal_writer_delay\"] = \"200ms\"\r\ndefault[\"postgresql\"][\"commit_delay\"] = 0\r\ndefault[\"postgresql\"][\"commit_siblings\"] = 5\r\n\r\n# checkpoints\r\ndefault[\"postgresql\"][\"checkpoint_segments\"] = 3\r\ndefault[\"postgresql\"][\"checkpoint_timeout\"] = \"5min\"\r\ndefault[\"postgresql\"][\"checkpoint_completion_target\"] = 0.5\r\ndefault[\"postgresql\"][\"checkpoint_warning\"] = \"30s\"\r\n\r\n# archiving\r\ndefault[\"postgresql\"][\"archive_mode\"] = \"off\"\r\ndefault[\"postgresql\"][\"archive_command\"] = \"\"\r\ndefault[\"postgresql\"][\"archive_timeout\"] = 0\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# REPLICATION\r\n#------------------------------------------------------------------------------\r\n\r\n# master server\r\ndefault[\"postgresql\"][\"max_wal_senders\"] = 0\r\ndefault[\"postgresql\"][\"wal_sender_delay\"] = \"1s\"\r\ndefault[\"postgresql\"][\"wal_keep_segments\"] = 0\r\ndefault[\"postgresql\"][\"vacuum_defer_cleanup_age\"] = 0\r\ndefault[\"postgresql\"][\"replication_timeout\"] = \"60s\"\r\ndefault[\"postgresql\"][\"synchronous_standby_names\"] = \"\"\r\n\r\n# standby servers\r\ndefault[\"postgresql\"][\"hot_standby\"] = \"off\"\r\ndefault[\"postgresql\"][\"max_standby_archive_delay\"] = \"30s\"\r\ndefault[\"postgresql\"][\"max_standby_streaming_delay\"] = \"30s\"\r\ndefault[\"postgresql\"][\"wal_receiver_status_interval\"] = \"10s\"\r\ndefault[\"postgresql\"][\"hot_standby_feedback\"] = \"off\"\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# QUERY TUNING\r\n#------------------------------------------------------------------------------\r\n\r\n# planner method configuration\r\ndefault[\"postgresql\"][\"enable_bitmapscan\"] = \"on\"\r\ndefault[\"postgresql\"][\"enable_hashagg\"] = \"on\"\r\ndefault[\"postgresql\"][\"enable_hashjoin\"] = \"on\"\r\ndefault[\"postgresql\"][\"enable_indexscan\"] = \"on\"\r\ndefault[\"postgresql\"][\"enable_material\"] = \"on\"\r\ndefault[\"postgresql\"][\"enable_mergejoin\"] = \"on\"\r\ndefault[\"postgresql\"][\"enable_nestloop\"] = \"on\"\r\ndefault[\"postgresql\"][\"enable_seqscan\"] = \"on\"\r\ndefault[\"postgresql\"][\"enable_sort\"] = \"on\"\r\ndefault[\"postgresql\"][\"enable_tidscan\"] = \"on\"\r\n\r\n# planner cost constants\r\ndefault[\"postgresql\"][\"seq_page_cost\"] = 1.0\r\ndefault[\"postgresql\"][\"random_page_cost\"] = 4.0\r\ndefault[\"postgresql\"][\"cpu_tuple_cost\"] = 0.01\r\ndefault[\"postgresql\"][\"cpu_index_tuple_cost\"] = 0.005\r\ndefault[\"postgresql\"][\"cpu_operator_cost\"] = 0.0025\r\ndefault[\"postgresql\"][\"effective_cache_size\"] = \"128MB\"\r\n\r\n# genetic query optimizer\r\ndefault[\"postgresql\"][\"geqo\"] = \"on\"\r\ndefault[\"postgresql\"][\"geqo_threshold\"] = 12\r\ndefault[\"postgresql\"][\"geqo_effort\"] = 5\r\ndefault[\"postgresql\"][\"geqo_pool_size\"] = 0\r\ndefault[\"postgresql\"][\"geqo_generations\"] = 0\r\ndefault[\"postgresql\"][\"geqo_selection_bias\"] = 2.0\r\ndefault[\"postgresql\"][\"geqo_seed\"] = 0.0\r\n\r\n# other planner options\r\ndefault[\"postgresql\"][\"default_statistics_target\"] = 100\r\ndefault[\"postgresql\"][\"constraint_exclusion\"] = \"partition\"\r\ndefault[\"postgresql\"][\"cursor_tuple_fraction\"] = 0.1\r\ndefault[\"postgresql\"][\"from_collapse_limit\"] = 8\r\ndefault[\"postgresql\"][\"join_collapse_limit\"] = 8\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# ERROR REPORTING AND LOGGING\r\n#------------------------------------------------------------------------------\r\n\r\n# where to log\r\ndefault[\"postgresql\"][\"log_destination\"] = \"stderr\"\r\ndefault[\"postgresql\"][\"logging_collector\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_directory\"] = \"pg_log\"\r\ndefault[\"postgresql\"][\"log_filename\"] = \"postgresql-%Y-%m-%d_%H%M%S.log\"\r\ndefault[\"postgresql\"][\"log_file_mode\"] = 0600\r\ndefault[\"postgresql\"][\"log_truncate_on_rotation\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_rotation_age\"] = \"1d\"\r\ndefault[\"postgresql\"][\"log_rotation_size\"] = \"10MB\"\r\n\r\n# These are relevant when logging to syslog:\r\ndefault[\"postgresql\"][\"syslog_facility\"] = \"LOCAL0\"\r\ndefault[\"postgresql\"][\"syslog_ident\"] = \"postgres\"\r\ndefault[\"postgresql\"][\"silent_mode\"] = \"off\"\r\n\r\n# when to log\r\ndefault[\"postgresql\"][\"client_min_messages\"] = \"notice\"\r\ndefault[\"postgresql\"][\"log_min_messages\"] = \"warning\"\r\ndefault[\"postgresql\"][\"log_min_error_statement\"] = \"error\"\r\ndefault[\"postgresql\"][\"log_min_duration_statement\"] = -1\r\n\r\n# what to log\r\ndefault[\"postgresql\"][\"debug_print_parse\"] = \"off\"\r\ndefault[\"postgresql\"][\"debug_print_rewritten\"] = \"off\"\r\ndefault[\"postgresql\"][\"debug_print_plan\"] = \"off\"\r\ndefault[\"postgresql\"][\"debug_pretty_print\"] = \"on\"\r\ndefault[\"postgresql\"][\"log_checkpoints\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_connections\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_disconnections\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_duration\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_error_verbosity\"] = \"default\"\r\ndefault[\"postgresql\"][\"log_hostname\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_line_prefix\"] = \"%t \"\r\ndefault[\"postgresql\"][\"log_lock_waits\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_statement\"] = \"none\"\r\ndefault[\"postgresql\"][\"log_temp_files\"] = -1\r\ndefault[\"postgresql\"][\"log_timezone\"] = \"(defaults to server environment setting)\"\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# RUNTIME STATISTICS\r\n#------------------------------------------------------------------------------\r\n\r\n# query/index statistics collector\r\ndefault[\"postgresql\"][\"track_activities\"] = \"on\"\r\ndefault[\"postgresql\"][\"track_counts\"] = \"on\"\r\ndefault[\"postgresql\"][\"track_functions\"] = \"none\"\r\ndefault[\"postgresql\"][\"track_activity_query_size\"] = 1024\r\ndefault[\"postgresql\"][\"update_process_title\"] = \"on\"\r\ndefault[\"postgresql\"][\"stats_temp_directory\"] = 'pg_stat_tmp'\r\n\r\n# statistics monitoring\r\ndefault[\"postgresql\"][\"log_parser_stats\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_planner_stats\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_executor_stats\"] = \"off\"\r\ndefault[\"postgresql\"][\"log_statement_stats\"] = \"off\"\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# AUTOVACUUM PARAMETERS\r\n#------------------------------------------------------------------------------\r\n\r\ndefault[\"postgresql\"][\"autovacuum\"] = \"on\"\r\ndefault[\"postgresql\"][\"log_autovacuum_min_duration\"] = -1\r\ndefault[\"postgresql\"][\"autovacuum_max_workers\"] = 3\r\ndefault[\"postgresql\"][\"autovacuum_naptime\"] = \"1min\"\r\ndefault[\"postgresql\"][\"autovacuum_vacuum_threshold\"] = 50\r\ndefault[\"postgresql\"][\"autovacuum_analyze_threshold\"] = 50\r\ndefault[\"postgresql\"][\"autovacuum_vacuum_scale_factor\"] = 0.2\r\ndefault[\"postgresql\"][\"autovacuum_analyze_scale_factor\"] = 0.1\r\ndefault[\"postgresql\"][\"autovacuum_freeze_max_age\"] = 200000000\r\ndefault[\"postgresql\"][\"autovacuum_vacuum_cost_delay\"] = \"20ms\"\r\ndefault[\"postgresql\"][\"autovacuum_vacuum_cost_limit\"] = -1\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# CLIENT CONNECTION DEFAULTS\r\n#------------------------------------------------------------------------------\r\n\r\n# statement behavior\r\ndefault[\"postgresql\"][\"search_path\"] = '\"$user\",public'\r\ndefault[\"postgresql\"][\"default_tablespace\"] = \"\"\r\ndefault[\"postgresql\"][\"temp_tablespaces\"] = \"\"\r\ndefault[\"postgresql\"][\"check_function_bodies\"] = \"on\"\r\ndefault[\"postgresql\"][\"default_transaction_isolation\"] = \"read committed\"\r\ndefault[\"postgresql\"][\"default_transaction_read_only\"] = \"off\"\r\ndefault[\"postgresql\"][\"default_transaction_deferrable\"] = \"off\"\r\ndefault[\"postgresql\"][\"session_replication_role\"] = \"origin\"\r\ndefault[\"postgresql\"][\"statement_timeout\"] = 0\r\ndefault[\"postgresql\"][\"vacuum_freeze_min_age\"] = 50000000\r\ndefault[\"postgresql\"][\"vacuum_freeze_table_age\"] = 150000000\r\ndefault[\"postgresql\"][\"bytea_output\"] = \"hex\"\r\ndefault[\"postgresql\"][\"xmlbinary\"] = \"base64\"\r\ndefault[\"postgresql\"][\"xmloption\"] = \"content\"\r\n\r\n# locale and formatting\r\ndefault[\"postgresql\"][\"datestyle\"] = \"iso, mdy\"\r\ndefault[\"postgresql\"][\"intervalstyle\"] = \"postgres\"\r\ndefault[\"postgresql\"][\"timezone\"] = \"(defaults to server environment setting)\"\r\ndefault[\"postgresql\"][\"timezone_abbreviations\"] = \"Default\"\r\ndefault[\"postgresql\"][\"extra_float_digits\"] = 0\r\ndefault[\"postgresql\"][\"client_encoding\"] = \"sql_ascii\"\r\n\r\n# These settings are initialized by initdb, but they can be changed.\r\ndefault[\"postgresql\"][\"lc_messages\"] = \"en_US.UTF-8\"\r\ndefault[\"postgresql\"][\"lc_monetary\"] = \"en_US.UTF-8\"\r\ndefault[\"postgresql\"][\"lc_numeric\"] = \"en_US.UTF-8\"\r\ndefault[\"postgresql\"][\"lc_time\"] = \"en_US.UTF-8\"\r\n\r\n# default configuration for text search\r\ndefault[\"postgresql\"][\"default_text_search_config\"] = \"pg_catalog.english\"\r\n\r\n# other defaults\r\ndefault[\"postgresql\"][\"dynamic_library_path\"] = \"$libdir\"\r\ndefault[\"postgresql\"][\"local_preload_libraries\"] = \"\"\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# LOCK MANAGEMENT\r\n#------------------------------------------------------------------------------\r\n\r\ndefault[\"postgresql\"][\"deadlock_timeout\"] = \"1s\"\r\ndefault[\"postgresql\"][\"max_locks_per_transaction\"] = 64\r\ndefault[\"postgresql\"][\"max_pred_locks_per_transaction\"] = 64\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# VERSION/PLATFORM COMPATIBILITY\r\n#------------------------------------------------------------------------------\r\n\r\n# previous postgresql versions\r\ndefault[\"postgresql\"][\"array_nulls\"] = \"on\"\r\ndefault[\"postgresql\"][\"backslash_quote\"] = \"safe_encoding\"\r\ndefault[\"postgresql\"][\"default_with_oids\"] = \"off\"\r\ndefault[\"postgresql\"][\"escape_string_warning\"] = \"on\"\r\ndefault[\"postgresql\"][\"lo_compat_privileges\"] = \"off\"\r\ndefault[\"postgresql\"][\"quote_all_identifiers\"] = \"off\"\r\ndefault[\"postgresql\"][\"sql_inheritance\"] = \"on\"\r\ndefault[\"postgresql\"][\"standard_conforming_strings\"] = \"on\"\r\ndefault[\"postgresql\"][\"synchronize_seqscans\"] = \"on\"\r\n\r\n# other platforms and clients\r\ndefault[\"postgresql\"][\"transform_null_equals\"] = \"off\"\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# ERROR HANDLING\r\n#------------------------------------------------------------------------------\r\n\r\ndefault[\"postgresql\"][\"exit_on_error\"] = \"off\"\r\ndefault[\"postgresql\"][\"restart_after_crash\"] = \"on\"\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# USERS AND DATABASES\r\n#------------------------------------------------------------------------------\r\n\r\ndefault[\"postgresql\"][\"users\"] = []\r\ndefault[\"postgresql\"][\"databases\"] = []\r\ndefault[\"postgresql\"][\"extensions\"] = []\r\ndefault[\"postgresql\"][\"languages\"] = []\r\n\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# CUSTOMIZED OPTIONS\r\n#------------------------------------------------------------------------------\r\n\r\ndefault[\"postgresql\"][\"custom_variable_classes\"] = \"\"\r\n\r\n\r\n#------------------------------------------------------------------------------\r\n# POSTGIS OPTIONS\r\n#------------------------------------------------------------------------------\r\n\r\ndefault[\"postgis\"][\"version\"] = \"2.0\"\r\n```\r\n\r\n\r\n## TODO\r\n\r\n* Add support for replication setup\r\n* Add installation and configuration for the following packages:\r\n\r\n```\r\npostgresql-{version}-ip4r\r\npostgresql-{version}-pgq3\r\npostgresql-{version}-plsh\r\npostgresql-{version}-pgmp\r\npostgresql-{version}-plproxy\r\npostgresql-{version}-repmgr\r\npostgresql-{version}-debversion\r\npostgresql-{version}-pgpool2\r\npostgresql-{version}-plr\r\npostgresql-{version}-slony1-2\r\n```\r\n\r\n\r\n## Contributing\r\n\r\n1. Fork it\r\n2. Create your feature branch (`git checkout -b my-new-feature`)\r\n3. Commit your changes (`git commit -am 'Added some feature'`)\r\n4. Push to the branch (`git push origin my-new-feature`)\r\n5. Create new Pull Request\r\n\r\n\r\n## Contributors\r\n\r\nMany thanks go to the following who have contributed to making this cookbook even better:\r\n\r\n* **[@flashingpumpkin](https://github.com/flashingpumpkin)**\r\n * recipe bugfixes\r\n * add `pg_user` and `pg_database` definitions\r\n* **[@cmer](https://github.com/cmer)**\r\n * add `encrypted_password` param for `pg_user` definition\r\n* **[@dickeyxxx](https://github.com/dickeyxxx)**\r\n * speed up recipe loading and execution\r\n * add support for specifying database locale\r\n * add support for adding users and databases via attributes\r\n* **[@alno](https://github.com/alno)**\r\n * add support to install additional languages/extensions/postgis to existing databases\r\n * add `pg_database_extensions` definition\r\n* **[@ermolaev](https://github.com/ermolaev)**\r\n * improve platform check for source repo\r\n * support debian 7 (wheezy)\r\n* **[@escobera](https://github.com/escobera)**\r\n * fix for missing ssl directives in `postgresql.conf`\r\n* **[@cdoughty77](https://github.com/cdoughty77)**\r\n * allow finer tuning inside pg_hba.conf file\r\n* **[@NOX73](https://github.com/NOX73)**\r\n * fix `postgresql.conf` ssl parameter failure on 9.1\r\n* **[@navinpeiris](https://github.com/navinpeiris)**\r\n * add ability to configure apt distribution\r\n* **[@michihuber](https://github.com/michihuber)**\r\n * create data/config dirs recursively\r\n* **[@sethcall](https://github.com/sethcall)**\r\n * allow 'lazy' evaluation of configs in the custom template\r\n* **[@jherdman](https://github.com/jherdman)**\r\n * update README to include updated apt repository link\r\n * add support for version 9.3\r\n* **[@stianselland](https://github.com/stianselland)**\r\n * fix idempotence for `pg_user` definition\r\n* **[@alenia](https://github.com/alenia)**\r\n * conditionally override attributes in `postgresql.conf`\r\n * support for customizable apt sources\r\n * add ability to use an apt keyserver\r\n* **[@Randommood](https://github.com/Randommood)**\r\n * conditionally override attributes in `postgresql.conf`\r\n * support for customizable apt sources\r\n * add ability to use an apt keyserver\r\n* **[@vrischmann](https://github.com/vrischmann)**\r\n * uncomment `wal_writer_delay` attribute\r\n* **[@brainopia](https://github.com/brainopia)**\r\n * support `encrypted_password` in the `pg_user` recipe\r\n* **[@tpitale](https://github.com/tpitale)**\r\n * update example encoding/locales in README to fix error\r\n* **[@seamusabshere](https://github.com/seamusabshere)**\r\n * uncomment various configuration settings\r\n * uncomment more configuration settings\r\n * uncomment `commit_delay` and `temp_buffers` settings\r\n * uncomment `random_page_cost` and `seq_page_cost` settings\r\n* **[@RichardWigley](https://github.com/RichardWigley)**\r\n * fix empty password causes exception\r\n* **[@phumpal](https://github.com/phumpal)**\r\n * update `default[\"postgresql\"][\"apt_key\"]` to new location\r\n* **[@mjallday](https://github.com/mjallday)**\r\n * allow controlling how to restart postgres\r\n* **[@cgunther](https://github.com/cgunther)**\r\n * uncomment `log_filename` attribute\r\n* **[@rosenfeld](https://github.com/rosenfeld)**\r\n * ensure proper database is selected in `pg_database` definition\r\n* **[@j-martin](https://github.com/j-martin)**\r\n * ensure proper quoting of role name in `pg_user` definition\r\n* **[@helgi](https://github.com/helgi)**\r\n * add replication mode to `pg_user` definition\r\n* **[@vesln](https://github.com/vesln)**\r\n * add missing `ssl_ca_file` and `ssl_crl_file` attributes to the configuration template\r\n* **[@vivid-inc](https://github.com/vivid-inc)**\r\n * add `service_actions` attribute\r\n\r\n\r\n## License\r\n\r\n**chef-postgresql**\r\n\r\n* Freely distributable and licensed under the [MIT license](http://phlipper.mit-license.org/2012-2015/license.html).\r\n* Copyright (c) 2012-2015 Phil Cohen (github@phlippers.net)\r\n* http://phlippers.net/\r\n","google":"UA-10172882-2","note":"Don't delete this file! It's used internally to help with page regeneration."}
Please sign in to comment.
Something went wrong with that request. Please try again.