masterpgadministration-091023104603-phpapp01

download masterpgadministration-091023104603-phpapp01

of 111

Transcript of masterpgadministration-091023104603-phpapp01

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    1/111

    MasteringPostgreSQL Administration

    BRUCE MOMJIAN,

    ENTERPRISEDB

    April, 2009

    AbstractPOSTGRESQL is an open-source, full-featured relational database.This presentation covers advanced administration topics.

    Creative Commons Attribution License http://momjian.us/presentations

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    2/111

    Introduction

    Installation

    Configuration

    Maintenance

    Monitoring

    Recovery

    Mastering PostgreSQL Administration 1

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    3/111

    Installation

    Click-Through installers

    MS Windows

    Linux OS/X Solaris

    Ports

    RPM DEB PKG other packages

    Source

    obtaining build options

    installingMastering PostgreSQL Administration 2

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    4/111

    Initialization (initdb)

    $ initdb

    The files belonging to this database system will be owned by user "postgres".

    This user must also own the server process.

    The database cluster will be initialized with locale C.

    The default database encoding has accordingly been set to SQL_ASCII.The default text search configuration will be set to "english".

    creating directory /u/pg/data ... ok

    creating subdirectories ... ok

    selecting default max_connections ... 100

    selecting default shared_buffers/max_fsm_pages ... 32MB/204800

    creating configuration files ... okcreating template1 database in /u/pg/data/base/1 ... ok

    initializing pg_authid ... ok

    initializing dependencies ... ok

    creating system views ... ok

    loading system objects descriptions ... ok

    creating conversions ... okcreating dictionaries ... ok

    setting privileges on built-in objects ... ok

    creating information schema ... ok

    vacuuming database template1 ... ok

    copying template1 to template0 ... ok

    copying template1 to postgres ... okMastering PostgreSQL Administration 3

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    5/111

    Initialization (continued)

    WARNING: enabling "trust" authentication for local connections

    You can change this by editing pg_hba.conf or using the -A option the

    next time you run initdb.

    Success. You can now start the database server using:

    postgres -D /u/pg/data

    or

    pg_ctl -D /u/pg/data -l logfile start

    Mastering PostgreSQL Administration 4

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    6/111

    pg_controldata

    pg_control version number: 74

    Catalog version number: 200502281

    Database system identifier: 4766833642862247929

    Database cluster state: shut down

    pg_control last modified: 03/03/05 10:49:18Current log file ID: 0

    Next log file segment: 1

    Latest checkpoint location: 0/A34010

    Prior checkpoint location: 0/A2D5C0

    Latest checkpoints REDO location: 0/A34010

    Latest checkpoints UNDO location: 0/0Latest checkpoints TimeLineID: 1

    Latest checkpoints NextXID: 545

    Latest checkpoints NextOID: 17233

    Time of latest checkpoint: 03/03/05 10:49:18

    Database block size: 8192

    Blocks per segment of large relation: 131072Bytes per WAL segment: 16777216

    Maximum length of identifiers: 64

    Maximum number of function arguments: 32

    Date/time type storage: floating-point numbers

    Maximum length of locale name: 128

    LC_COLLATE: CLC_CTYPE: C

    Mastering PostgreSQL Administration 5

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    7/111

    System Architecture

    utility

    Plan

    Optimal Path

    Query

    Postmaster

    Postgres Postgres

    Libpq

    Main

    Generate Plan

    Traffic Cop

    Generate Paths

    Execute Plan

    e.g. CREATE TABLE, COPYSELECT, INSERT, UPDATE, DELETE

    Rewrite Query

    Parse Statement

    UtilityCommand

    Storage ManagersCatalogUtilities

    Access Methods Nodes / Lists

    Mastering PostgreSQL Administration 6

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    8/111

    Starting Postmaster

    LOG: database system was shut down at 2009-01-27 10:32:05 EST

    LOG: database system is ready to accept connectionsLOG: autovacuum launcher started

    manually

    pg_ctl

    on boot

    Mastering PostgreSQL Administration 7

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    9/111

    Stopping Postmaster

    LOG: received smart shutdown request

    LOG: autovacuum launcher shutting downLOG: shutting down

    LOG: database system is shut down

    manually

    pg_ctl

    on shutdown

    Mastering PostgreSQL Administration 8

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    10/111

    Connections

    local unix domain socket

    host TCP/IP, both SSL or non-SSL

    hostssl onlySSL

    hostnossl never SSL

    Mastering PostgreSQL Administration 9

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    11/111

    Authentication

    trust

    passwords md5 crypt password

    remote authentication

    host ident using pg_ident.conf

    kerberos gss sspi

    Mastering PostgreSQL Administration 10

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    12/111

    Authentication (continued)

    local socket ident

    host ident using local identd

    socket permissions

    pam

    ldap

    reject

    Mastering PostgreSQL Administration 11

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    13/111

    Access

    hostname and network mask

    database name

    role name (user or group)

    filename or list of databases, role

    IPv6

    Mastering PostgreSQL Administration 12

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    14/111

    Pg_hba.conf

    # TYPE DATABASE USER CIDR-ADDRESS METHOD

    # "local" is for Unix domain socket connections onlylocal all all trust

    # IPv4 local connections:

    host all all 127.0.0.1/32 trust

    # IPv6 local connections:host all all ::1/128 trust

    Mastering PostgreSQL Administration 13

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    15/111

    Permissions

    host connection permissions

    role permissions

    create roles create databases table permissions

    Database creation

    template1 customization system tables disk space computations

    Mastering PostgreSQL Administration 14

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    16/111

    Data Directory

    $ ls -CF

    PG_VERSION pg_ident.conf pg_xlog/base/ pg_multixact/ postgresql.conf

    global/ pg_subtrans/ postmaster.opts

    pg_clog/ pg_tblspc/ postmaster.pid

    pg_hba.conf pg_twophase/

    Mastering PostgreSQL Administration 15

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    17/111

    Database Directories

    $ ls -CF global/

    1136 2397 2843

    1137 2671 2844

    1213 2672 2845

    1214 2676 2846

    1232 2677 2847

    1233 2694 pg_auth

    1260 2695 pg_control

    1261 2697 pg_database1262 2698 pgstat.stat

    2396 2842

    $ ls -CF base/

    1/ 11510/ 11511/ 16384/

    $ ls -CF base/16384

    11429 2617 2696

    11431 2618 2699

    ...Mastering PostgreSQL Administration 16

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    18/111

    Transaction/WAL Directories

    $ ls -CF pg_xlog/

    000000010000000000000000 archive_status/$ ls -CF pg_clog/

    0000

    Mastering PostgreSQL Administration 17

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    19/111

    Configuration Directories

    $ ls -CF share/

    conversion_create.sql postgres.description sql_features.txtinformation_schema.sql postgres.shdescription system_views.sql

    pg_hba.conf.sample postgresql.conf.sample timezone/

    pg_ident.conf.sample psqlrc.sample timezonesets/

    pg_service.conf.sample recovery.conf.sample tsearch_data/

    postgres.bki snowball_create.sql unknown.pltcl

    Mastering PostgreSQL Administration 18

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    20/111

    Configuration Postgresql.conf

    Mastering PostgreSQL Administration 19

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    21/111

    PostgreSQL.Conf

    # -----------------------------

    # PostgreSQL configuration file# -----------------------------

    #

    # This file consists of lines of the form:

    #

    # name = value#

    # (The "=" 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.

    Mastering PostgreSQL Administration 20

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    22/111

    PostgreSQL.Conf (Continued)

    # 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=on". Some paramters can be changed at run time

    # with the "SET" SQL command.

    #

    # Memory units: kB = kilobytes MB = megabytes GB = gigabytes

    # Time units: ms = milliseconds s = seconds min = minutes h = hours d = days

    Mastering PostgreSQL Administration 21

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    23/111

    Configuration File Location

    #data_directory = ConfigDir # use data in another directory

    # (change requires restart)#hba_file = ConfigDir/pg_hba.conf # host-based authentication file

    # (change requires restart)

    #ident_file = 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 = (none) # write an extra PID file

    # (change requires restart)

    Mastering PostgreSQL Administration 22

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    24/111

    Connections and Authentication

    #listen_addresses = localhost # what IP address(es) to listen on;

    # comma-separated list of addresses;# defaults to localhost, * = all

    # (change requires restart)

    #port = 5432 # (change requires restart)

    max_connections = 100 # (change requires restart)

    # Note: Increasing max_connections costs ~400 bytes of shared memory per# 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 = 3 # (change requires restart)

    #unix_socket_directory = # (change requires restart)

    #unix_socket_group = # (change requires restart)#unix_socket_permissions = 0777 # begin with 0 to use octal notation

    # (change requires restart)

    #bonjour_name = # defaults to the computer name

    # (change requires restart)

    Mastering PostgreSQL Administration 23

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    25/111

    Security and Authentication

    #authentication_timeout = 1min # 1s-600s

    #ssl = off # (change requires restart)#ssl_ciphers = ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH # allowed SSL ciphers

    # (change requires restart)

    #password_encryption = on

    #db_user_namespace = off

    # Kerberos and GSSAPI#krb_server_keyfile = # (change requires restart)

    #krb_-

    srvname = postgres # (change requires restart, Kerberos only)

    #krb_server_hostname = # empty string matches any keytab entry

    # (change requires restart, Ker-beros only)

    #krb_caseins_users = off # (change requires restart)

    #krb_realm = # (change requires restart)

    Mastering PostgreSQL Administration 24

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    26/111

    TCP/IP Control

    # see "man 7 tcp" for details

    #tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds;# 0 selects the system default

    #tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds;

    # 0 selects the system default

    #tcp_keepalives_count = 0 # TCP_KEEPCNT;

    # 0 selects the system default

    Mastering PostgreSQL Administration 25

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    27/111

    Memory Usage

    shared_buffers = 32MB # min 128kB or max_connections*16kB

    # (change requires restart)#temp_buffers = 8MB # min 800kB

    #max_prepared_transactions = 5 # 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).#work_mem = 1MB # min 64kB

    #maintenance_work_mem = 16MB # min 1MB

    #max_stack_depth = 2MB # min 100kB

    Kernel changes often required.

    Mastering PostgreSQL Administration 26

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    28/111

    Sizing Shared Memory

    MPage Out

    Page In

    R

    A

    Kernel Disk Buffer Cache

    Free

    Kernel

    Postgres Backend

    Postgres Backend

    Postgres Backend

    PostgreSQL Shared Buffer Cache

    Swap

    Mastering PostgreSQL Administration 27

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    29/111

    Free Space Map and Kernel Resources

    # - Free Space Map -

    max_fsm_pages = 204800 # min max_fsm_relations*16, 6 bytes each# (change requires restart)

    #max_fsm_relations = 1000 # min 100, ~70 bytes each

    # (change requires restart)

    # - Kernel Resource Usage -#max_files_per_process = 1000 # min 25

    # (change requires restart)

    #shared_preload_libraries = # (change requires restart)

    Mastering PostgreSQL Administration 28

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    30/111

    Vacuum and Background Writer

    # - Cost-Based Vacuum Delay -

    #vacuum_cost_delay = 0 # 0-1000 milliseconds#vacuum_cost_page_hit = 1 # 0-10000 credits

    #vacuum_cost_page_miss = 10 # 0-10000 credits

    #vacuum_cost_page_dirty = 20 # 0-10000 credits

    #vacuum_cost_limit = 200 # 1-10000 credits

    # - Background Writer -

    #bgwriter_delay = 200ms # 10-10000ms between rounds

    #bgwriter_lru_maxpages = 100 # 0-1000 max buffers written/round

    #bgwriter_lru_multiplier = 2.0 # 0-

    10.0 multipler on buffers scanned/round

    Mastering PostgreSQL Administration 29

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    31/111

    Write-Ahead Log (WAL)

    #fsync = on # turns forced synchronization on or off

    #synchronous_commit = on # immediate fsync at commit

    #wal_sync_method = fsync # the default is the first option

    # supported by the operating system:# open_datasync

    # fdatasync

    # fsync

    # fsync_writethrough

    # open_sync#full_page_writes = on # recover from partial page writes

    #wal_buffers = 64kB # min 32kB

    # (change requires restart)

    #wal_writer_delay = 200ms # 1-10000 milliseconds

    #commit_delay = 0 # range 0-100000, in microseconds#commit_siblings = 5 # range 1-1000

    Mastering PostgreSQL Administration 30

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    32/111

    Write-Ahead Logging (Continued)

    fsync

    fsync

    BackendPostgres

    BackendPostgres

    BackendPostgres

    PostgreSQL Shared Buffer Cache WriteAhead Log

    Kernel Disk Buffer Cache

    Disk Blocks

    Mastering PostgreSQL Administration 31

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    33/111

    Checkpoints and Archiving

    # - Checkpoints -

    #checkpoint_segments = 3 # in logfile segments, min 1, 16MB each

    #checkpoint_timeout = 5min # range 30s-1h

    #checkpoint_completion_target = 0.5 # checkpoint target duration, 0.0 - 1.0#checkpoint_warning = 30s # 0 is off

    # - Archiving -

    #archive_mode = off # allows archiving to be done

    # (change requires restart)

    #archive_command = # command to use to archive a logfile segment

    #archive_timeout = 0 # force a logfile segment switch after this

    # time; 0 is off

    Mastering PostgreSQL Administration 32

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    34/111

    Query Tuning

    # - Planner Method Configuration -

    #enable_bitmapscan = on

    #enable_hashagg = on

    #enable_hashjoin = on#enable_indexscan = on

    #enable_mergejoin = on

    #enable_nestloop = on

    #enable_seqscan = on

    #enable_sort = on#enable_tidscan = on

    # - Planner Cost Constants -

    #seq_page_cost = 1.0 # measured on an arbitrary scale

    #random_page_cost = 4.0 # same scale as above#cpu_tuple_cost = 0.01 # same scale as above

    #cpu_index_tuple_cost = 0.005 # same scale as above

    #cpu_operator_cost = 0.0025 # same scale as above

    #effective_cache_size = 128MB

    Mastering PostgreSQL Administration 33

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    35/111

    Query Tuning (Continued)

    #geqo = on

    #geqo_threshold = 12#geqo_effort = 5 # range 1-10

    #geqo_pool_size = 0 # selects default based on effort

    #geqo_generations = 0 # selects default based on effort

    #geqo_selection_bias = 2.0 # range 1.5-2.0

    # - Other Planner Options -

    #default_statistics_target = 10 # range 1-1000

    #constraint_exclusion = off

    #from_collapse_limit = 8

    #join_collapse_limit = 8 # 1 disables collapsing of explicit# JOIN clauses

    Mastering PostgreSQL Administration 34

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    36/111

    Where To Log

    #log_destination = 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 = off # 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 = pg_log # directory where log files are written,

    # can be absolute or relative to PGDATA#log_filename = postgresql-%Y-%m-%d_%H%M%S.log # log file name pattern,

    # can include strftime() escapes

    Mastering PostgreSQL Administration 35

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    37/111

    Where To Log (Continued)

    #log_truncate_on_rotation = 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 = 1d # Automatic rotation of logfiles will

    # happen after that time. 0 to disable.

    #log_rotation_size = 10MB # Automatic rotation of logfiles will

    # happen after that much log output.

    # 0 to disable.

    # These are relevant when logging to syslog:

    #syslog_facility = LOCAL0

    #syslog_ident = postgres

    Mastering PostgreSQL Administration 36

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    38/111

    When to Log

    #client_min_messages = notice # values in order of decreasing detail:

    # debug5

    # debug4

    # debug3

    # debug2

    # debug1

    # log

    # notice

    # warning

    # error

    #log_min_messages = notice # values in order of decreasing detail:

    # debug5

    # debug4

    # debug3

    # debug2

    # debug1

    # info

    # notice

    # warning

    # error

    # log

    # fatal

    # panic

    Mastering PostgreSQL Administration 37

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    39/111

    When to Log (Continued)

    #log_error_verbosity = default # terse, default, or verbose messages

    #log_min_error_statement = 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 = -1 # -1 is disabled, 0 logs all statements

    # and their durations, > 0 logs only

    # statements running at least this time.#silent_mode = off # DO NOT USE without syslog or

    # logging_collector

    # (change requires restart)

    Mastering PostgreSQL Administration 38

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    40/111

    What to Log

    #debug_print_parse = off

    #debug_print_rewritten = off#debug_print_plan = off

    #debug_pretty_print = off

    #log_checkpoints = off

    #log_connections = off

    #log_disconnections = off#log_duration = off

    #log_hostname = off

    Mastering PostgreSQL Administration 39

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    41/111

    What To Log: Log_line_prefix

    #log_line_prefix = # special values:

    # %u = user name

    # %d = database name# %r = remote host and port

    # %h = remote host

    # %p = process ID

    # %t = timestamp without milliseconds

    # %m = timestamp with milliseconds# %i = command tag

    # %c = session ID

    # %l = session line number

    # %s = session start timestamp

    # %v = virtual transaction ID# %x = transaction ID (0 if none)

    # %q = stop here in non-session

    # processes

    # %% = %

    # e.g. Mastering PostgreSQL Administration 40

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    42/111

    What to Log (Continued)

    #log_lock_waits = off # log lock waits >= deadlock_timeout

    #log_statement = none # none, ddl, mod, all

    #log_temp_files = -1 # log temporary files equal or larger

    # than specified size;

    # -1 disables, 0 logs all temp files

    #log_timezone = unknown # actually, defaults to TZ environment

    # setting

    Mastering PostgreSQL Administration 41

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    43/111

    Runtime Statistics

    # - Query/Index Statistics Collector -

    #track_activities = on

    #track_counts = on

    #update_process_title = on

    # - Statistics Monitoring -

    #log_parser_stats = off#log_planner_stats = off

    #log_executor_stats = off

    #log_statement_stats = off

    Mastering PostgreSQL Administration 42

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    44/111

    Autovacuum

    #autovacuum = on # Enable autovacuum subprocess? on

    # requires track_counts to also be on.

    #log_autovacuum_min_duration = -1 # -1 disables, 0 logs all actions and

    # their durations, > 0 logs only

    # actions running at least that time.#autovacuum_max_workers = 3 # max number of autovacuum subprocesses

    #autovacuum_naptime = 1min # time between autovacuum runs

    #autovacuum_vacuum_threshold = 50 # min number of row updates before

    # vacuum

    #autovacuum_analyze_threshold = 50 # min number of row updates before

    # analyze#autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum

    #autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze

    #autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum

    # (change requires restart)

    #autovacuum_vacuum_cost_delay = 20 # default vacuum cost delay for

    # autovacuum, -1 means use# vacuum_cost_delay

    #autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for

    # autovacuum, -1 means use

    # vacuum_cost_limit

    Mastering PostgreSQL Administration 43

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    45/111

    Statement Behavior

    #search_path = "$user",public # schema names

    #default_tablespace = # a tablespace name, uses the default

    #temp_tablespaces = # a list of tablespace names, uses

    # only default tablespace

    #check_function_bodies = on

    #default_transaction_isolation = read committed

    #default_transaction_read_only = off#session_replication_role = origin

    #statement_timeout = 0 # 0 is disabled

    #vacuum_freeze_min_age = 100000000

    #xmlbinary = base64

    #xmloption = content

    Mastering PostgreSQL Administration 44

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    46/111

    Locale and Formatting

    datestyle = iso, mdy

    #timezone = unknown # actually, defaults to TZ environment

    # setting

    #timezone_abbreviations = 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 = 0 # min -15, max 2

    #client_encoding = sql_ascii # actually, defaults to database

    # encoding

    # These settings are initialized by initdb, but they can be changed.

    lc_messages = C # locale for system error message# strings

    lc_monetary = C # locale for monetary formatting

    lc_numeric = C # locale for number formatting

    lc_time = C # locale for time formatting

    Mastering PostgreSQL Administration 45

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    47/111

    Full Text Search

    # default configuration for text search

    default_text_search_config = pg_catalog.english

    Mastering PostgreSQL Administration 46

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    48/111

    Other Defaults

    #explain_pretty_print = on

    #dynamic_library_path = $libdir

    #local_preload_libraries =

    Mastering PostgreSQL Administration 47

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    49/111

    Lock Management

    #deadlock_timeout = 1s

    #max_locks_per_transaction = 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.

    Mastering PostgreSQL Administration 48

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    50/111

    Version/Platform Compatibility

    # - Previous PostgreSQL Versions -

    #add_missing_from = off

    #array_nulls = on

    #backslash_quote = safe_encoding # on, off, or safe_encoding

    #default_with_oids = off

    #escape_string_warning = on

    #regex_flavor = advanced # advanced, extended, or basic

    #sql_inheritance = on

    #standard_conforming_strings = off

    #synchronize_seqscans = on

    # - Other Platforms and Clients -#transform_null_equals = off

    Mastering PostgreSQL Administration 49

    C i i

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    51/111

    Customization

    #custom_variable_classes = # list of custom variable class names

    Mastering PostgreSQL Administration 50

    I f

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    52/111

    Interfaces

    Installing

    Compiled Languages (C, ecpg) Scripting Language (Perl, Python) SPI

    Connection Pooling

    Mastering PostgreSQL Administration 51

    I l d Fil

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    53/111

    Include Files

    $ ls -CF include/

    ecpg_config.h libpq/ pgtypes_interval.h

    ecpg_informix.h libpq-fe.h pgtypes_numeric.h

    ecpgerrno.h pg_config.h pgtypes_timestamp.h

    ecpglib.h pg_config_manual.h postgres_ext.h

    ecpgtype.h pg_config_os.h server/

    informix/ pgtypes_date.h sql3types.hinternal/ pgtypes_error.h sqlca.h

    Mastering PostgreSQL Administration 52

    Lib Fil

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    54/111

    Library Files

    $ ls -CF lib/

    ascii_and_mic.so* libecpg_compat.so.3@ utf8_and_big5.so*

    cyrillic_and_mic.so* libecpg_compat.so.3.0* utf8_and_cyrillic.so*dict_snowball.so* libpgport.a utf8_and_euc_cn.so*

    euc_cn_and_mic.so* libpgtypes.a utf8_and_euc_jis_2004.s

    euc_jis_2004_and_shift_ libpgtypes.so@ utf8_and_euc_jp.so*

    euc_jp_and_sjis.so* libpgtypes.so.3@ utf8_and_euc_kr.so*

    euc_kr_and_mic.so* libpgtypes.so.3.0* utf8_and_euc_tw.so*euc_tw_and_big5.so* libpq.a utf8_and_gb18030.so*

    latin2_and_win1250.so* libpq.so@ utf8_and_gbk.so*

    latin_and_mic.so* libpq.so.5@ utf8_and_iso8859.so*

    libecpg.a libpq.so.5.1* utf8_and_iso8859_1.so*

    libecpg.so@ pgxs/ utf8_and_johab.so*libecpg.so.6@ plperl.so* utf8_and_shift_jis_2004

    libecpg.so.6.0* plpgsql.so* utf8_and_sjis.so*

    libecpg_compat.a pltcl.so* utf8_and_uhc.so*

    libecpg_compat.so@ utf8_and_ascii.so* utf8_and_win.so*

    Mastering PostgreSQL Administration 53

    Maintenance

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    55/111

    Maintenance

    Mastering PostgreSQL Administration 54

    Backup

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    56/111

    Backup

    File system-level

    tar, cpio while shutdown file system snapshot rsync, shutdown, rsync, restart

    pg_dump/pg_dumpall

    restore/pg_restore with custom format

    Mastering PostgreSQL Administration 55

    Continuous Archiving /

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    57/111

    Continuous Archiving /

    Point-In-Time Recovery (PITR)

    WALWAL

    WAL

    Continuous

    Backup

    0200

    1100

    0900

    1300

    File System-

    Level Backup

    Mastering PostgreSQL Administration 56

    PITR Backup Procedures

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    58/111

    PITR Backup Procedures

    1. archive_command = cp %p /mnt/server/pgsql/%f

    2. SELECT pg_start_backup(label);

    3. Perform file system-level backup (can be inconsistent)

    4. SELECT pg_stop_backup();

    Mastering PostgreSQL Administration 57

    PITR Recovery

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    59/111

    PITR Recovery

    WAL1

    740

    1

    755

    Continuous

    Backup

    File System-

    Level Backup

    WAL

    WAL

    1

    700

    1

    730

    Mastering PostgreSQL Administration 58

    PITR Recovery Procecdures

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    60/111

    PITR Recovery Procecdures

    1. Stop postmaster

    2. Restore file system-level backup

    3. Make adjustments as outlined in the documentation

    4. Create recovery.conf

    5. Add restore_command = cp /mnt/server/pgsql/%f %p

    6. Start the postmaster

    Mastering PostgreSQL Administration 59

    Master-Slave Replication - Slony

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    61/111

    Master Slave Replication Slony

    ! ! ! !

    ! ! ! !

    ! ! ! !

    " " " "

    " " " "

    # # # #

    # # # #

    $ $ $ $ $

    $ $ $ $ $

    $ $ $ $ $

    $ $ $ $ $

    $ $ $ $ $

    $ $ $ $ $

    % % % % %

    % % % % %

    % % % % %

    % % % % %

    % % % % %

    & & & &

    & & & &

    & & & &

    & & & &

    ' ' ' '

    ' ' ' '

    ' ' ' '

    ( ( ( (

    ( ( ( (

    ) ) ) )

    ) ) ) )

    0 0 0 0 0

    0 0 0 0 0

    0 0 0 0 0

    0 0 0 0 0

    0 0 0 0 0

    0 0 0 0 0

    1 1 1 1 1

    1 1 1 1 1

    1 1 1 1 1

    1 1 1 1 1

    1 1 1 1 1

    2 2 2 2

    2 2 2 2

    2 2 2 2

    3 3 3 3

    3 3 3 3

    3 3 3 3

    4 4 4 4

    4 4 4 4

    5 5 5 5

    5 5 5 5

    6

    6

    6

    6

    6

    6

    6

    6

    6

    6

    6

    6

    6

    6

    8

    8

    8

    8

    8

    8

    8

    8

    8

    8

    8

    8

    8

    8

    9

    9

    9

    9

    9

    9

    9

    9

    9

    9

    9

    9

    9

    9

    @

    @

    @

    @

    @

    @

    @

    @

    @

    @

    @

    @

    @

    @

    A

    A

    A

    A

    A

    A

    A

    A

    A

    A

    A

    A

    A

    A

    B

    B

    B

    B

    B

    B

    B

    B

    B

    B

    B

    B

    B

    B

    C

    C

    C

    C

    C

    C

    C

    C

    C

    C

    C

    C

    C

    C

    D

    D

    D

    D

    D

    D

    D

    D

    D

    D

    D

    D

    D

    D

    E

    E

    E

    E

    E

    E

    E

    E

    E

    E

    E

    E

    E

    E

    F

    F

    F

    F

    F

    F

    F

    F

    F

    F

    F

    F

    F

    F

    G

    G

    G

    G

    G

    G

    G

    G

    G

    G

    G

    G

    G

    G

    H

    H

    H

    H

    H

    H

    H

    H

    H

    H

    H

    H

    H

    H

    I

    I

    I

    I

    I

    I

    I

    I

    I

    I

    I

    I

    I

    I

    P

    P

    P

    P

    P

    P

    P

    P

    P

    P

    P

    P

    P

    P

    Q

    Q

    Q

    Q

    Q

    Q

    Q

    Q

    Q

    Q

    Q

    Q

    Q

    Q

    R

    R

    R

    R

    R

    R

    R

    R

    R

    R

    R

    R

    R

    R

    S

    S

    S

    S

    S

    S

    S

    S

    S

    S

    S

    S

    S

    S

    T

    T

    T

    T

    T

    T

    T

    T

    T

    T

    T

    T

    T

    T

    Mastering PostgreSQL Administration 60

    Other Solutions

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    62/111

    Other Solutions

    Mutli-master replication: pgcluster, bacardo

    Pooling: pgpool

    Mastering PostgreSQL Administration 61

    Data Maintenance

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    63/111

    VACUUM (nonblocking), free space map

    VACUUM FULL

    ANALYZE

    Mastering PostgreSQL Administration 62

    Vacuum

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    64/111

    Shared Memory

    Hashed

    Free Space Map

    Block #

    DB oid

    Block #

    Block #Table

    Relfilenode

    Block #

    Table

    Block #

    Block #Block # Block #

    Table

    Mastering PostgreSQL Administration 63

    Vacuum Full

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    65/111

    V

    A

    C

    T

    E

    IV

    A

    C

    T

    E

    IV

    A

    C

    T

    E

    IV

    A

    C

    T

    E

    IV

    A

    C

    T

    E

    I

    V

    A

    C

    T

    E

    I

    V

    E

    X

    P

    E

    I

    R

    A

    C

    T

    E

    I

    V

    A

    C

    T

    E

    I

    V

    A

    C

    T

    E

    I

    V

    A

    C

    T

    E

    I

    V

    A

    C

    T

    E

    I

    V

    A

    C

    T

    E

    I

    V

    AC

    T

    E

    I

    V

    AC

    T

    E

    I

    V

    AC

    T

    E

    I

    V

    AC

    T

    E

    I

    V

    AC

    T

    E

    I

    V

    AC

    T

    E

    I

    V

    AC

    T

    E

    I

    V

    AC

    T

    E

    I

    V

    AC

    T

    E

    I

    V

    AC

    T

    E

    I

    V

    A

    C

    T

    E

    I

    V

    E

    X

    P

    E

    I

    R

    A

    C

    T

    E

    I

    V

    Truncate File

    SlotsRows Into Expired

    Move Trailing

    Rows Identified

    With Expired

    Original Heap

    A

    C

    T

    E

    IV

    A

    C

    T

    E

    IV

    A

    C

    T

    E

    IV

    A

    C

    T

    E

    IV

    A

    C

    T

    E

    IV

    A

    C

    T

    E

    I

    Mastering PostgreSQL Administration 64

    Checkpoints

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    66/111

    p

    Write all dirty shared buffers

    Sync all dirty kernel buffers

    Recycle WAL files

    Check for server messages indicating too-frequent checkpoints

    If so, increase checkpoint_segments

    Mastering PostgreSQL Administration 65

    Automating Tasks

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    67/111

    g

    0 3 * * * root psql -c VACUUM FULL; test

    0 3 * * * root vacuumdb -a -f

    Autovacuum usually makes vacuum administration unnecessary.

    Mastering PostgreSQL Administration 66

    Monitoring Active Sessions

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    68/111

    Mastering PostgreSQL Administration 67

    ps

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    69/111

    $ ps -Upostgres

    PID TT STAT TIME COMMAND

    2125 ?? Ss 0:00.26 ./bin/postmaster -i2142 ?? S 0:00.03 stats buffer process (postmaster)

    2143 ?? S 0:00.06 stats collector process (postmaster)

    3341 ?? I 0:00.07 postgres test [local] idle (postmaster)

    3340 p6 I+ 0:00.03 psql test

    Mastering PostgreSQL Administration 68

    top

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    70/111

    $ top

    load averages: 0.56, 0.39, 0.36 18:25:58

    138 processes: 5 running, 130 sleeping, 3 zombieCPU states: 50.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 50.0% idle

    Memory: Real: 96M/133M Virt: 535M/1267M Free: 76M

    PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND

    23785 postgres 57 0 11M 5336K run/0 0:07 30.75% 30.66% postmaster23784 postgres 2 0 10M 11M sleep 0:00 2.25% 2.25% psql

    Mastering PostgreSQL Administration 69

    pgmonitor

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    71/111

    Mastering PostgreSQL Administration 70

    Query Monitoring

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    72/111

    test=> SELECT * FROM pg_stat_activity;

    -[ RECORD 1 ]-+--------------------------------

    datid | 16384datname | test

    procpid | 2373

    usesysid | 10

    usename | postgrescurrent_query | select * from pg_stat_activity;

    waiting | f

    xact_start | 2009-01-27 12:12:59.917695-05

    query_start | 2009-01-27 12:12:59.917695-05backend_start | 2009-01-27 12:12:33.422001-05

    client_addr |

    client_port | -1

    Mastering PostgreSQL Administration 71

    pgmonitor

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    73/111

    Mastering PostgreSQL Administration 72

    Access Statistics

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    74/111

    pg_stat_all_indexes | view | postgres

    pg_stat_all_tables | view | postgres

    pg_stat_database | view | postgrespg_stat_sys_indexes | view | postgres

    pg_stat_sys_tables | view | postgres

    pg_stat_user_indexes | view | postgres

    pg_stat_user_tables | view | postgres

    pg_statio_all_indexes | view | postgrespg_statio_all_sequences | view | postgres

    pg_statio_all_tables | view | postgres

    pg_statio_sys_indexes | view | postgres

    pg_statio_sys_sequences | view | postgres

    pg_statio_sys_tables | view | postgres

    pg_statio_user_indexes | view | postgres

    pg_statio_user_sequences | view | postgres

    pg_statio_user_tables | view | postgres

    Mastering PostgreSQL Administration 73

    Database Statistics

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    75/111

    test=> SELECT * FROM pg_stat_database;

    ...

    -[ RECORD 4 ]-+----------datid | 16384

    datname | test

    numbackends | 1

    xact_commit | 188xact_rollback | 0

    blks_read | 95

    blks_hit | 11832

    tup_returned | 64389

    tup_fetched | 2938tup_inserted | 0

    tup_updated | 0

    tup_deleted | 0

    Mastering PostgreSQL Administration 74

    Table Activity

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    76/111

    test=> SELECT * FROM pg_stat_all_tables;

    ...-[ RECORD 10 ]---+------------------------

    relid | 2616

    schemaname | pg_catalog

    relname | pg_opclass

    seq_scan | 2seq_tup_read | 2

    idx_scan | 99

    idx_tup_fetch | 99

    n_tup_ins | 0n_tup_upd | 0

    n_tup_del | 0

    n_tup_hot_upd | 0

    n_live_tup | 0Mastering PostgreSQL Administration 75

    n_dead_tup | 0

    last vacuum |

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    77/111

    _ |

    last_autovacuum |last_analyze |

    last_autoanalyze |

    Mastering PostgreSQL Administration 76

    Table Block Activity

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    78/111

    test=> SELECT * FROM pg_statio_all_tables;

    -[ RECORD 50 ]--+------------------------

    relid | 2602

    schemaname | pg_catalog

    relname | pg_amop

    heap_blks_read | 3

    heap_blks_hit | 114idx_blks_read | 5

    idx_blks_hit | 303

    toast_blks_read |

    toast_blks_hit |tidx_blks_read |

    tidx_blks_hit |

    Mastering PostgreSQL Administration 77

    Analyzing Activity

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    79/111

    Heavily used tables

    Unnecessary indexes

    Additional indexes

    Index usage

    TOAST usage

    Mastering PostgreSQL Administration 78

    CPU

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    80/111

    $ vmstat 5

    procs memory page disks faults cpu

    r b w avm fre flt re pi po fr sr s0 s0 in sy cs us sy id1 0 0 501820 48520 1234 86 2 0 0 3 5 0 263 2881 599 10 4 86

    3 0 0 512796 46812 1422 201 12 0 0 0 3 0 259 6483 827 4 7 88

    3 0 0 542260 44356 788 137 6 0 0 0 8 0 286 5698 741 2 5 94

    4 0 0 539708 41868 576 65 13 0 0 0 4 0 273 5721 819 16 4 80

    4 0 0 547200 32964 454 0 0 0 0 0 5 0 253 5736 948 50 4 464 0 0 556140 23884 461 0 0 0 0 0 2 0 249 5917 959 52 3 44

    1 0 0 535136 46280 1056 141 25 0 0 0 2 0 261 6417 890 24 6 70

    Mastering PostgreSQL Administration 79

    I/O

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    81/111

    $ iostat 5

    tty sd0 sd1 sd2 % cpu

    tin tout sps tps msps sps tps msps sps tps msps usr nic sys int idl7 119 244 11 6.1 0 0 27.3 0 0 18.1 9 1 4 0 86

    0 86 20 1 1.4 0 0 0.0 0 0 0.0 2 0 2 0 96

    0 82 61 4 3.6 0 0 0.0 0 0 0.0 2 0 2 0 97

    0 65 6 0 0.0 0 0 0.0 0 0 0.0 1 0 2 0 97

    12 90 31 2 5.4 0 0 0.0 0 0 0.0 4 0 3 0 9324 173 6 0 4.9 0 0 0.0 0 0 0.0 48 0 3 0 49

    0 91 3594 63 4.6 0 0 0.0 0 0 0.0 11 0 4 0 85

    Mastering PostgreSQL Administration 80

    Disk Usage

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    82/111

    play=# SELECT relfilenode, relpages * 8 AS kilobytes

    play-# FROM pg_class

    play-# WHERE relname = customer;relfilenode | kilobytes

    -------------+----------

    16806 | 480

    (1 row)

    Vacuum required. dbsize available.

    Mastering PostgreSQL Administration 81

    TOAST Usage

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    83/111

    play=# SELECT relname, relpages * 8 AS kilobytes

    play-# FROM pg_class

    play-# WHERE relname = pg_toast_16806 ORplay-# relname = pg_toast_16806_index

    play-# ORDER BY relname;

    relname | kilobytes

    ----------------------+----------

    pg_toast_16806 | 0pg_toast_16806_index | 1

    Mastering PostgreSQL Administration 82

    Index Usage

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    84/111

    play=# SELECT c2.relname, c2.relpages * 8 AS kilobytes

    play-# FROM pg_class c, pg_class c2, pg_index i

    play-# WHERE c.relname = customer ANDplay-# c.oid = i.indrelid AND

    play-# c2.oid = i.indexrelid

    play-# ORDER BY c2.relname;

    relname | kilobytes

    ----------------------+----------customer_id_indexdex | 26

    Mastering PostgreSQL Administration 83

    Largest Tables

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    85/111

    play=# SELECT relname, relpages * 8

    play-# FROM pg_class

    play-# ORDER BY relpages DESC;relname | kilobytes

    ----------------------+----------

    bigtable | 3290

    customer | 3144

    Mastering PostgreSQL Administration 84

    Database File Mapping - oid2name

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    86/111

    $ oid2name

    All databases:

    ---------------------------------18720 = test1

    1 = template1

    18719 = template0

    18721 = test

    18735 = postgres18736 = cssi

    Mastering PostgreSQL Administration 85

    Table File Mapping

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    87/111

    $ cd /usr/local/pgsql/data/base

    $ oid2name

    All databases:---------------------------------

    16817 = test2

    16578 = x

    16756 = test

    1 = template116569 = template0

    16818 = test3

    16811 = floattest

    $ cd 16756$ ls 1873*

    18730 18731 18732 18735 18736 18737 18738 18739

    Mastering PostgreSQL Administration 86

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    88/111

    $ oid2name -d test -o 18737

    Tablename of oid 18737 from database "test":

    ---------------------------------

    18737 = ips

    $ oid2name -d test -t ips

    Oid of table ips from database "test":

    ---------------------------------

    18737 = ips

    $ # show disk space for every db object

    $ du * | while read SIZE RELFILENODE

    > do

    > echo "$SIZE oid2name -q -d test -o $RELFILENODE"

    > done24 18737 = ips

    36 18722 = cities

    ...

    Mastering PostgreSQL Administration 87

    $ # b b t t b l t fi t

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    89/111

    $ # same as above, but sort by largest first$ du * | while read SIZE OID

    > do

    > echo "$SIZE oid2name -q -d test -o $OID"

    > done |

    > sort -rn2048 19324 = bigtable

    1950 23903 = customers

    ...

    $ # show disk usage per database

    $ cd /usr/local/pgsql/data/base

    $ du -s * |

    > while read SIZE OID

    > do

    > echo "$SIZE oid2name -q | grep ^$OID "

    > done |

    > sort -rn

    2256 18721 = test

    2135 18735 = postgresMastering PostgreSQL Administration 88

    Disk Balancing

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    90/111

    Move pg_xlog to another drive using symlinks

    Tablespaces

    Mastering PostgreSQL Administration 89

    Per-Database Tablespaces

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    91/111

    DB4

    Disk 3

    DB2 DB3DB1

    Disk 1 Disk 2

    Mastering PostgreSQL Administration 90

    Per-Object Tablespaces

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    92/111

    constrainttab1 tab2 index

    Disk 1 Disk 2 Disk 3

    Mastering PostgreSQL Administration 91

    Analyzing Locking

    $ ps -Upostgres

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    93/111

    $ ps -Upostgres

    PID TT STAT TIME COMMAND

    9874 ?? I 0:00.07 postgres test [local] idle in transaction (postmaster)

    9835 ?? S 0:00.05 postgres test [local] UPDATE waiting (postmaster)

    10295 ?? S 0:00.05 postgres test [local] DELETE waiting (postmaster)

    test=> SELECT * FROM pg_locks;

    relation | database | transaction | pid | mode | granted

    ----------+----------+-------------+------+------------------+---------

    17143 | 17142 | | 9173 | AccessShareLock | t17143 | 17142 | | 9173 | RowExclusiveLock | t

    | | 472 | 9380 | ExclusiveLock | t

    | | 468 | 9338 | ShareLock | f

    | | 470 | 9338 | ExclusiveLock | t

    16759 | 17142 | | 9380 | AccessShareLock | t17143 | 17142 | | 9338 | AccessShareLock | t

    17143 | 17142 | | 9338 | RowExclusiveLock | t

    | | 468 | 9173 | ExclusiveLock | t

    (9 rows)

    Mastering PostgreSQL Administration 92

    Miscellaneous Tasks

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    94/111

    Log file rotation, syslog

    Upgrading

    Migration

    Mastering PostgreSQL Administration 93

    Administration Tools

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    95/111

    pgadmin

    phppgadmin

    Mastering PostgreSQL Administration 94

    Recovery

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    96/111

    Mastering PostgreSQL Administration 95

    Client Application Crash

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    97/111

    Nothing Required. Transactions in progress are rolled back.

    Mastering PostgreSQL Administration 96

    Graceful Server Crash

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    98/111

    Nothing Required. Transactions in progress are rolled back.

    Mastering PostgreSQL Administration 97

    Abrupt Server Crash

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    99/111

    Nothing Required. Transactions in progress are rolled back.

    Mastering PostgreSQL Administration 98

    Operating System Crash

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    100/111

    Nothing Required. Transactions in progress are rolled back. Partial pagewrites are repaired.

    Mastering PostgreSQL Administration 99

    Disk Failure

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    101/111

    Restore from previous backup or use PITR.

    Mastering PostgreSQL Administration 100

    Accidental DELETE

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    102/111

    Recover table from previous backup, perhaps using pg_restore. It ispossible to modify the backend code to make deleted tuples visible,dump out the deleted table and restore the original code. All tuples inthe table since the previous vacuum will be visible. It is possible torestrict that so only tuples deleted by a specific transaction are visible.

    Mastering PostgreSQL Administration 101

    Write-Ahead Log (WAL) Corruption

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    103/111

    See pg_resetxlog. Review recent transactions and identify any damage,including partially committed transactions.

    Mastering PostgreSQL Administration 102

    File Deletion

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    104/111

    It may be necessary to create an empty file with the deleted file name sothe object can be deleted, and then the object restored from backup.

    Mastering PostgreSQL Administration 103

    Accidental DROP TABLE

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    105/111

    Restore from previous backup.

    Mastering PostgreSQL Administration 104

    Accidental DROP INDEX

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    106/111

    Recreate index.

    Mastering PostgreSQL Administration 105

    Accidental DROP DATABASE

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    107/111

    Restore from previous backup.

    Mastering PostgreSQL Administration 106

    Non-Starting Installation

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    108/111

    Restart problems are usually caused by write-ahead log problems. Seepg_resetxlog. Review recent transactions and identify any damage,including partially committed transactions.

    Mastering PostgreSQL Administration 107

    Index Corruption

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    109/111

    Use REINDEX.

    Mastering PostgreSQL Administration 108

    Table Corruption

  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    110/111

    Try reindexing the table. Try identifying the corrupt OID of the row andtransfer the valid rows into another table using SELECTINTOWHEREoid != ###. Use http://sources.redhat.com/rhdb/tools.html to analyzethe internal structure of the table.

    Mastering PostgreSQL Administration 109

    Conclusion

    http://sources.redhat.com/rhdb/tools.htmlhttp://sources.redhat.com/rhdb/tools.html
  • 7/28/2019 masterpgadministration-091023104603-phpapp01

    111/111

    Mastering PostgreSQL Administration 110