Received: from localhost (unknown [200.46.204.183]) by mail.postgresql.org (Postfix) with ESMTP id 0D8BB64FCEA for ; Wed, 12 Nov 2008 09:31:00 -0400 (AST) Received: from mail.postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 09474-08 for ; Wed, 12 Nov 2008 09:30:49 -0400 (AST) X-Greylist: delayed 00:07:57.26579 by SQLgrey-1.7.6 Received: from ug-out-1314.google.com (ug-out-1314.google.com [66.249.92.172]) by mail.postgresql.org (Postfix) with ESMTP id A97CA64FC66 for ; Wed, 12 Nov 2008 09:30:47 -0400 (AST) Received: by ug-out-1314.google.com with SMTP id k40so1056078ugc.7 for ; Wed, 12 Nov 2008 05:30:45 -0800 (PST) Received: by 10.103.11.5 with SMTP id o5mr5338880mui.132.1226496167446; Wed, 12 Nov 2008 05:22:47 -0800 (PST) Received: from SQUID02 (mol92-8-88-166-5-153.fbx.proxad.net [88.166.5.153]) by mx.google.com with ESMTPS id t10sm16526722muh.16.2008.11.12.05.22.45 (version=SSLv3 cipher=RC4-MD5); Wed, 12 Nov 2008 05:22:46 -0800 (PST) From: "Julien Theulier" To: References: <4919F2C6.4000303@fuzzy.cz> In-Reply-To: <4919F2C6.4000303@fuzzy.cz> Subject: Index usage with sub select or inner joins Date: Wed, 12 Nov 2008 14:22:47 +0100 Organization: SQUID Solutions Message-ID: <003c01c944c9$c1d92ac0$458b8040$@com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_003D_01C944D2.239D92C0" X-Mailer: Microsoft Office Outlook 12.0 Thread-Index: AclEQMfz6t11HRPlRJWFlu9yqJzAwAAaVOiQ Content-Language: fr X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0 tagged_above=0 required=5 tests=none X-Spam-Level: X-Archive-Number: 200811/87 X-Sequence-Number: 31818 Il s'agit d'un message à parties multiples au format MIME. ------=_NextPart_000_003D_01C944D2.239D92C0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Hello, I am doing some performances testing on Postgres & I discovered the following behavior, when using 2 different ways of writing selects (but doing the same aggregations at the end): 1. test case 1, using outer join: create table test2 as select soj_session_log_id, pv_timestamp, vi_pv_id,a.item_id, coalesce(sum(case when (bid_date=pv_timestamp - INTERVAL '3 day') then 1 else 0 end)) as recent_sales_3d1, coalesce(sum(case when (bid_date=pv_timestamp - INTERVAL '7 day') then 1 else 0 end)) as recent_sales_7d1, coalesce(sum(case when (bid_date=pv_timestamp - INTERVAL '14 day') then 1 else 0 end)) as recent_sales_14d1, coalesce(sum(case when (bid_date=pv_timestamp - INTERVAL '30 day') then 1 else 0 end)) as recent_sales_30d1, coalesce(sum(case when (bid_date=pv_timestamp - INTERVAL '60 day') then 1 else 0 end)) as recent_sales_60d1 from bm_us_views_main_1609 a left outer join bm_us_bids b on (b.item_id=a.item_id and b.bid_date=a.pv_timestamp - INTERVAL '60 day')) where a.item_type in (7,9) and qty>1 group by soj_session_log_id, pv_timestamp, vi_pv_id, a.item_id;; This query doesn't use any index according to the explain plan: "HashAggregate (cost=672109.07..683054.81 rows=182429 width=49)" " -> Merge Left Join (cost=646489.83..668004.42 rows=182429 width=49)" " Merge Cond: (a.item_id = b.item_id)" " Join Filter: ((b.bid_date < a.pv_timestamp) AND (b.bid_date >= (a.pv_timestamp - '60 days'::interval)))" " -> Sort (cost=331768.62..332224.69 rows=182429 width=41)" " Sort Key: a.item_id" " -> Seq Scan on bm_us_views_main_1609 a (cost=0.00..315827.08 rows=182429 width=41)" " Filter: ((item_type = ANY ('{7,9}'::numeric[])) AND (qty > 1))" " -> Sort (cost=314669.01..320949.52 rows=2512205 width=19)" " Sort Key: b.item_id" " -> Seq Scan on bm_us_bids b (cost=0.00..47615.05 rows=2512205 width=19)" 2. Test case 2, using sub queries: create table test2 as select soj_session_log_id, pv_timestamp, vi_pv_id,item_id, coalesce((select count(*) from bm_us_bids b where b.item_id=a.item_id and bid_date=pv_timestamp - INTERVAL '3 day' group by item_id ),0) as recent_sales_3d, coalesce((select count(*) from bm_us_bids b where b.item_id=a.item_id and bid_date=pv_timestamp - INTERVAL '7 day' group by item_id ),0) as recent_sales_7d, coalesce((select count(*) from bm_us_bids b where b.item_id=a.item_id and bid_date=pv_timestamp - INTERVAL '14 day' group by item_id ),0) as recent_sales_14d, coalesce((select count(*) from bm_us_bids b where b.item_id=a.item_id and bid_date=pv_timestamp - INTERVAL '30 day' group by item_id ),0) as recent_sales_30d, coalesce((select count(*) from bm_us_bids b where b.item_id=a.item_id and bid_date=pv_timestamp - INTERVAL '60 day' group by item_id ),0) as recent_sales_60d from bm_us_views_main_1609 a where item_type in (7,9) and qty>1; This query uses indexes according to the explain plan: "Seq Scan on bm_us_views_main_1609 a (cost=0.00..8720230.77 rows=182429 width=41)" " Filter: ((item_type = ANY ('{7,9}'::numeric[])) AND (qty > 1))" " SubPlan" " -> GroupAggregate (cost=0.00..9.21 rows=1 width=11)" " -> Index Scan using bm_us_bids_item_ix on bm_us_bids b (cost=0.00..9.20 rows=1 width=11)" " Index Cond: ((item_id = $0) AND (bid_date < $1) AND (bid_date >= ($1 - '60 days'::interval)))" " -> GroupAggregate (cost=0.00..9.21 rows=1 width=11)" " -> Index Scan using bm_us_bids_item_ix on bm_us_bids b (cost=0.00..9.20 rows=1 width=11)" " Index Cond: ((item_id = $0) AND (bid_date < $1) AND (bid_date >= ($1 - '30 days'::interval)))" " -> GroupAggregate (cost=0.00..9.21 rows=1 width=11)" " -> Index Scan using bm_us_bids_item_ix on bm_us_bids b (cost=0.00..9.20 rows=1 width=11)" " Index Cond: ((item_id = $0) AND (bid_date < $1) AND (bid_date >= ($1 - '14 days'::interval)))" " -> GroupAggregate (cost=0.00..9.21 rows=1 width=11)" " -> Index Scan using bm_us_bids_item_ix on bm_us_bids b (cost=0.00..9.20 rows=1 width=11)" " Index Cond: ((item_id = $0) AND (bid_date < $1) AND (bid_date >= ($1 - '7 days'::interval)))" " -> GroupAggregate (cost=0.00..9.21 rows=1 width=11)" " -> Index Scan using bm_us_bids_item_ix on bm_us_bids b (cost=0.00..9.20 rows=1 width=11)" " Index Cond: ((item_id = $0) AND (bid_date < $1) AND (bid_date >= ($1 - '3 days'::interval)))" The index bm_us_bids_item_ix is on columns item_id, bidder_id, bid_date QUESTION: Why the planner choose seq scan in the first case & indexes scan in the second case? In a more general way, I observed that the planner has difficulties to select index scans & does in almost all the cases seq scan, when doing join queries. After investigations, it looks like when you join table a with table b on a column x and y and you have an index on column x only, the planner is not able to choose the index scan. You have to build the index corresponding exactly to the join statement btw the 2 tables For example,by creating an new index on item_id and bid_date, the planner has been able to choose this last index in both cases. Would it be possible that the planner can choose in any case the closest index for queries having outer join Last thing, I am running Postgres 8.3.4 on a Windows laptop having 3.5Gb RAM, 161Gb disk and dual core 2.5Gz processor Regards, Julien Theulier ------=_NextPart_000_003D_01C944D2.239D92C0 Content-Type: application/octet-stream; name="postgresql.conf" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="postgresql.conf" # ----------------------------- # PostgreSQL configuration file # ----------------------------- # # This file consists of lines of the form: # # name =3D value # # (The "=3D" is optional.) Whitespace may be used. Comments are = introduced with # "#" anywhere on a line. The complete list of parameter names and = allowed # values can be found in the PostgreSQL documentation. # # The commented-out settings shown in this file represent the default = values. # Re-commenting a setting is NOT sufficient to revert it to the default = value; # you need to reload the server. # # This file is read on server startup and when the server receives a = SIGHUP # signal. If you edit the file on a running system, you have to SIGHUP = the # server for the changes to take effect, or use "pg_ctl reload". Some # parameters, which are marked below, require a server shutdown and = restart to # take effect. # # Any parameter can also be given as a command-line option to the = server, e.g., # "postgres -c log_connections=3Don". Some paramters can be changed at = run time # with the "SET" SQL command. # # Memory units: kB =3D kilobytes MB =3D megabytes GB =3D gigabytes # Time units: ms =3D milliseconds s =3D seconds min =3D minutes h =3D = hours d =3D days #------------------------------------------------------------------------= ------ # FILE LOCATIONS #------------------------------------------------------------------------= ------ # The default values of these variables are driven from the -D = command-line # option or PGDATA environment variable, represented here as ConfigDir. #data_directory =3D 'ConfigDir' # use data in another directory # (change requires restart) #hba_file =3D 'ConfigDir/pg_hba.conf' # host-based authentication file # (change requires restart) #ident_file =3D 'ConfigDir/pg_ident.conf' # ident configuration file # (change requires restart) # If external_pid_file is not explicitly set, no extra PID file is = written. #external_pid_file =3D '(none)' # write an extra PID file # (change requires restart) #------------------------------------------------------------------------= ------ # CONNECTIONS AND AUTHENTICATION #------------------------------------------------------------------------= ------ # - Connection Settings - listen_addresses =3D '*' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost', '*' =3D all # (change requires restart) port =3D 5432 # (change requires restart) # NOTE: This has been modified by EnterpriseDB's Tuning Wizard on = 2008/09/26 18:28:02 # Original Value for "max_connections" was "50" max_connections =3D 100 # (change requires restart) # Note: Increasing max_connections costs ~400 bytes of shared memory = per=20 # connection slot, plus lock space (see max_locks_per_transaction). You = might # also need to raise shared_buffers to support more connections. #superuser_reserved_connections =3D 3 # (change requires restart) #unix_socket_directory =3D '' # (change requires restart) #unix_socket_group =3D '' # (change requires restart) #unix_socket_permissions =3D 0777 # begin with 0 to use octal notation # (change requires restart) #bonjour_name =3D '' # defaults to the computer name # (change requires restart) # - Security and Authentication - #authentication_timeout =3D 1min # 1s-600s #ssl =3D off # (change requires restart) #ssl_ciphers =3D 'ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH' # allowed SSL = ciphers # (change requires restart) #password_encryption =3D on #db_user_namespace =3D off # Kerberos and GSSAPI #krb_server_keyfile =3D '' # (change requires restart) #krb_srvname =3D 'postgres' # (change requires restart, Kerberos only) #krb_server_hostname =3D '' # empty string matches any keytab entry # (change requires restart, Kerberos only) #krb_caseins_users =3D off # (change requires restart) #krb_realm =3D '' # (change requires restart) # - TCP Keepalives - # see "man 7 tcp" for details #tcp_keepalives_idle =3D 0 # TCP_KEEPIDLE, in seconds; # 0 selects the system default #tcp_keepalives_interval =3D 0 # TCP_KEEPINTVL, in seconds; # 0 selects the system default #tcp_keepalives_count =3D 0 # TCP_KEEPCNT; # 0 selects the system default #------------------------------------------------------------------------= ------ # RESOURCE USAGE (except WAL) #------------------------------------------------------------------------= ------ # - Memory - # NOTE: This has been modified by EnterpriseDB's Tuning Wizard on = 2008/09/26 18:28:02 # Original Value for "shared_buffers" was "256MB" shared_buffers =3D 512MB # min 128kB or max_connections*16kB # (change requires restart) temp_buffers =3D 128MB # min 800kB max_prepared_transactions =3D 64 # can be 0 or more # (change requires restart) # Note: Increasing max_prepared_transactions costs ~600 bytes of shared = memory # per transaction slot, plus lock space (see max_locks_per_transaction). # NOTE: This has been modified by EnterpriseDB's Tuning Wizard on = 2008/09/26 18:28:02 # Original Value for "work_mem" was "512MB" #work_mem =3D 364MB # min 64kB work_mem =3D 256MB # min 64kB # NOTE: This has been modified by EnterpriseDB's Tuning Wizard on = 2008/09/26 18:28:02 # Original Value for "maintenance_work_mem" was "256MB" maintenance_work_mem =3D 256MB # min 1MB max_stack_depth =3D 2MB # min 100kB # - Free Space Map - # NOTE: This has been modified by EnterpriseDB's Tuning Wizard on = 2008/09/26 18:28:02 # Original Value for "max_fsm_pages" was "204800" max_fsm_pages =3D 479281 # min max_fsm_relations*16, 6 bytes each # (change requires restart) # NOTE: This has been modified by EnterpriseDB's Tuning Wizard on = 2008/09/26 18:28:02 # Original Value for "max_fsm_relations" was "1000" max_fsm_relations =3D 29955 # min 100, ~70 bytes each # (change requires restart) # - Kernel Resource Usage - max_files_per_process =3D 1000 # min 25 # (change requires restart) shared_preload_libraries =3D '$libdir/plugins/plugin_debugger.dll' # = (change requires restart) # - Cost-Based Vacuum Delay - #vacuum_cost_delay =3D 0 # 0-1000 milliseconds #vacuum_cost_page_hit =3D 1 # 0-10000 credits #vacuum_cost_page_miss =3D 10 # 0-10000 credits #vacuum_cost_page_dirty =3D 20 # 0-10000 credits #vacuum_cost_limit =3D 200 # 1-10000 credits # - Background Writer - #bgwriter_delay =3D 200ms # 10-10000ms between rounds #bgwriter_lru_maxpages =3D 100 # 0-1000 max buffers written/round #bgwriter_lru_multiplier =3D 2.0 # 0-10.0 multipler on buffers = scanned/round #------------------------------------------------------------------------= ------ # WRITE AHEAD LOG #------------------------------------------------------------------------= ------ # - Settings - fsync =3D on # turns forced synchronization on or off synchronous_commit =3D on # immediate fsync at commit wal_sync_method =3D fsync # the default is the first option=20 # supported by the operating system: # open_datasync # fdatasync # fsync # fsync_writethrough # open_sync #full_page_writes =3D on # recover from partial page writes # NOTE: This has been modified by EnterpriseDB's Tuning Wizard on = 2008/09/26 18:28:02 # Original Value for "wal_buffers" was "256kB" wal_buffers =3D 256 # min 32kB # (change requires restart) #wal_writer_delay =3D 200ms # 1-10000 milliseconds #commit_delay =3D 0 # range 0-100000, in microseconds #commit_siblings =3D 5 # range 1-1000 # - Checkpoints - # NOTE: This has been modified by EnterpriseDB's Tuning Wizard on = 2008/09/26 18:28:02 # Original Value for "checkpoint_segments" was "150" checkpoint_segments =3D 128 # in logfile segments, min 1, 16MB each checkpoint_timeout =3D 30min # range 30s-1h checkpoint_completion_target =3D 0.5 # checkpoint target duration, 0.0 - = 1.0 checkpoint_warning =3D 30s # 0 is off # - Archiving - #archive_mode =3D off # allows archiving to be done # (change requires restart) #archive_command =3D '' # command to use to archive a logfile segment #archive_timeout =3D 0 # force a logfile segment switch after this # time; 0 is off #------------------------------------------------------------------------= ------ # QUERY TUNING #------------------------------------------------------------------------= ------ # - Planner Method Configuration - enable_bitmapscan =3D on enable_hashagg =3D on enable_hashjoin =3D on enable_indexscan =3D on enable_mergejoin =3D on enable_nestloop =3D on enable_seqscan =3D on enable_sort =3D on enable_tidscan =3D on # - Planner Cost Constants - #seq_page_cost =3D 1.0 # measured on an arbitrary scale #random_page_cost =3D 4.0 # same scale as above # NOTE: This parameter is been added by EnterpriseDB's Tuning Wiard on = 2008/09/26 18:28:02 random_page_cost =3D 3.5 # same scale as above #cpu_tuple_cost =3D 0.01 # same scale as above #cpu_index_tuple_cost =3D 0.005 # same scale as above #cpu_operator_cost =3D 0.0025 # same scale as above # NOTE: This has been modified by EnterpriseDB's Tuning Wizard on = 2008/09/26 18:28:02 # Original Value for "effective_cache_size" was "1024MB" effective_cache_size =3D 1536MB # - Genetic Query Optimizer - geqo =3D on geqo_threshold =3D 12 geqo_effort =3D 5 # range 1-10 geqo_pool_size =3D 0 # selects default based on effort geqo_generations =3D 0 # selects default based on effort geqo_selection_bias =3D 2.0 # range 1.5-2.0 # - Other Planner Options - #default_statistics_target =3D 10 # range 1-1000 #constraint_exclusion =3D off #from_collapse_limit =3D 8 #join_collapse_limit =3D 8 # 1 disables collapsing of explicit=20 # JOIN clauses #------------------------------------------------------------------------= ------ # ERROR REPORTING AND LOGGING #------------------------------------------------------------------------= ------ # - Where to Log - log_destination =3D 'stderr' # Valid values are combinations of # stderr, csvlog, syslog and eventlog, # depending on platform. csvlog # requires logging_collector to be on. # This is used when logging to stderr: logging_collector =3D on # Enable capturing of stderr and csvlog # into log files. Required to be on for # csvlogs. # (change requires restart) # These are only used if logging_collector is on: #log_directory =3D 'pg_log' # directory where log files are written, # can be absolute or relative to PGDATA #log_filename =3D 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name = pattern, # can include strftime() escapes #log_truncate_on_rotation =3D off # If on, an existing log file of the # same name as the new log file will be # truncated rather than appended to. # But such truncation only occurs on # time-driven rotation, not on restarts # or size-driven rotation. Default is # off, meaning append to existing files # in all cases. #log_rotation_age =3D 1d # Automatic rotation of logfiles will # happen after that time. 0 to disable. #log_rotation_size =3D 10MB # Automatic rotation of logfiles will=20 # happen after that much log output. # 0 to disable. # These are relevant when logging to syslog: #syslog_facility =3D 'LOCAL0' #syslog_ident =3D 'postgres' # - When to Log - #client_min_messages =3D notice # values in order of decreasing detail: # debug5 # debug4 # debug3 # debug2 # debug1 # log # notice # warning # error #log_min_messages =3D notice # values in order of decreasing detail: # debug5 # debug4 # debug3 # debug2 # debug1 # info # notice # warning # error # log # fatal # panic #log_error_verbosity =3D default # terse, default, or verbose messages #log_min_error_statement =3D error # values in order of decreasing = detail: # debug5 # debug4 # debug3 # debug2 # debug1 # info # notice # warning # error # log # fatal # panic (effectively off) #log_min_duration_statement =3D -1 # -1 is disabled, 0 logs all = statements # and their durations, > 0 logs only # statements running at least this time. #silent_mode =3D off # DO NOT USE without syslog or # logging_collector # (change requires restart) # - What to Log - #debug_print_parse =3D off #debug_print_rewritten =3D off #debug_print_plan =3D off #debug_pretty_print =3D off #log_checkpoints =3D off #log_connections =3D off #log_disconnections =3D off #log_duration =3D off #log_hostname =3D off log_line_prefix =3D '%t ' # special values: # %u =3D user name # %d =3D database name # %r =3D remote host and port # %h =3D remote host # %p =3D process ID # %t =3D timestamp without milliseconds # %m =3D timestamp with milliseconds # %i =3D command tag # %c =3D session ID # %l =3D session line number # %s =3D session start timestamp # %v =3D virtual transaction ID # %x =3D transaction ID (0 if none) # %q =3D stop here in non-session # processes # %% =3D '%' # e.g. '<%u%%%d> ' #log_lock_waits =3D off # log lock waits >=3D deadlock_timeout #log_statement =3D 'none' # none, ddl, mod, all #log_temp_files =3D -1 # log temporary files equal or larger # than specified size; # -1 disables, 0 logs all temp files #log_timezone =3D unknown # actually, defaults to TZ environment # setting #------------------------------------------------------------------------= ------ # RUNTIME STATISTICS #------------------------------------------------------------------------= ------ # - Query/Index Statistics Collector - #track_activities =3D on #track_counts =3D on #update_process_title =3D on # - Statistics Monitoring - #log_parser_stats =3D off #log_planner_stats =3D off #log_executor_stats =3D off #log_statement_stats =3D off #------------------------------------------------------------------------= ------ # AUTOVACUUM PARAMETERS #------------------------------------------------------------------------= ------ #autovacuum =3D on # Enable autovacuum subprocess? 'on'=20 # NOTE: This parameter is been added by EnterpriseDB's Tuning Wiard on = 2008/09/26 18:28:02 autovacuum =3D true # Enable autovacuum subprocess? 'on'=20 # requires track_counts to also be on. #log_autovacuum_min_duration =3D -1 # -1 disables, 0 logs all actions = and # their durations, > 0 logs only # actions running at least that time. #autovacuum_max_workers =3D 3 # max number of autovacuum subprocesses #autovacuum_naptime =3D 1min # time between autovacuum runs # NOTE: This parameter is been added by EnterpriseDB's Tuning Wiard on = 2008/09/26 18:28:02 autovacuum_naptime =3D 60 # time between autovacuum runs #autovacuum_vacuum_threshold =3D 50 # min number of row updates before # NOTE: This parameter is been added by EnterpriseDB's Tuning Wiard on = 2008/09/26 18:28:02 autovacuum_vacuum_threshold =3D 1000 # min number of row updates before # vacuum #autovacuum_analyze_threshold =3D 50 # min number of row updates before=20 # NOTE: This parameter is been added by EnterpriseDB's Tuning Wiard on = 2008/09/26 18:28:02 autovacuum_analyze_threshold =3D 250 # min number of row updates before=20 # analyze #autovacuum_vacuum_scale_factor =3D 0.2 # fraction of table size before = vacuum # NOTE: This parameter is been added by EnterpriseDB's Tuning Wiard on = 2008/09/26 18:28:02 autovacuum_vacuum_scale_factor =3D 0.2 # fraction of table size before = vacuum #autovacuum_analyze_scale_factor =3D 0.1 # fraction of table size before = analyze # NOTE: This parameter is been added by EnterpriseDB's Tuning Wiard on = 2008/09/26 18:28:02 autovacuum_analyze_scale_factor =3D 0.1 # fraction of table size before = analyze #autovacuum_freeze_max_age =3D 200000000 # maximum XID age before forced = vacuum # (change requires restart) #autovacuum_vacuum_cost_delay =3D 20 # default vacuum cost delay for # autovacuum, -1 means use # vacuum_cost_delay #autovacuum_vacuum_cost_limit =3D -1 # default vacuum cost limit for # autovacuum, -1 means use # vacuum_cost_limit #------------------------------------------------------------------------= ------ # CLIENT CONNECTION DEFAULTS #------------------------------------------------------------------------= ------ # - Statement Behavior - #search_path =3D '"$user",public' # schema names #default_tablespace =3D '' # a tablespace name, '' uses the default #temp_tablespaces =3D '' # a list of tablespace names, '' uses # only default tablespace #check_function_bodies =3D on #default_transaction_isolation =3D 'read committed' #default_transaction_read_only =3D off #session_replication_role =3D 'origin' #statement_timeout =3D 0 # 0 is disabled #vacuum_freeze_min_age =3D 100000000 #xmlbinary =3D 'base64' #xmloption =3D 'content' # - Locale and Formatting - datestyle =3D 'iso, dmy' #timezone =3D unknown # actually, defaults to TZ environment # setting #timezone_abbreviations =3D 'Default' # Select the set of available = time zone # abbreviations. Currently, there are # Default # Australia # India # You can create your own file in # share/timezonesets/. #extra_float_digits =3D 0 # min -15, max 2 #client_encoding =3D sql_ascii # actually, defaults to database # encoding # These settings are initialized by initdb, but they can be changed. lc_messages =3D 'French_France' # locale for system error message # strings lc_monetary =3D 'French_France' # locale for monetary formatting lc_numeric =3D 'French_France' # locale for number formatting lc_time =3D 'French_France' # locale for time formatting # default configuration for text search default_text_search_config =3D 'pg_catalog.french' # - Other Defaults - #explain_pretty_print =3D on #dynamic_library_path =3D '$libdir' #local_preload_libraries =3D '' #------------------------------------------------------------------------= ------ # LOCK MANAGEMENT #------------------------------------------------------------------------= ------ #deadlock_timeout =3D 1s max_locks_per_transaction =3D 64 # min 10 # (change requires restart) # Note: Each lock table slot uses ~270 bytes of shared memory, and = there are # max_locks_per_transaction * (max_connections + = max_prepared_transactions) # lock table slots. #------------------------------------------------------------------------= ------ # VERSION/PLATFORM COMPATIBILITY #------------------------------------------------------------------------= ------ # - Previous PostgreSQL Versions - #add_missing_from =3D off #array_nulls =3D on #backslash_quote =3D safe_encoding # on, off, or safe_encoding #default_with_oids =3D off #escape_string_warning =3D on #regex_flavor =3D advanced # advanced, extended, or basic #sql_inheritance =3D on #standard_conforming_strings =3D off #synchronize_seqscans =3D on # - Other Platforms and Clients - #transform_null_equals =3D off #------------------------------------------------------------------------= ------ # CUSTOMIZED OPTIONS #------------------------------------------------------------------------= ------ #custom_variable_classes =3D '' # list of custom variable class names ------=_NextPart_000_003D_01C944D2.239D92C0--