Administration
Administration
Administration
BRUCE MOMJIAN
1 / 117
Outline
1. Installation
2. Configuration
3. Maintenance
4. Monitoring
5. Recovery
2 / 117
1. Installation
• Click-through Installers
• MS Windows
• Linux
• OS X
• Ports
•RPM
•DEB
•PKG
•other packages
• Source
• obtaining
• build options
• installing
3 / 117
Initialization (initdb)
$ initdb /u/pgsql/data
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
4 / 117
pg_controldata
$ pg_controldata
pg_control version number: 1002
Catalog version number: 201707211
Database system identifier: 6544633619067825437
Database cluster state: shut down
pg_control last modified: Sun 15 Apr 2018 07:20:58 AM EDT
Latest checkpoint location: 0/15C09E0
Prior checkpoint location: 0/15C0708
Latest checkpoint’s REDO location: 0/15C09E0
Latest checkpoint’s REDO WAL file: 000000010000000000000001
Latest checkpoint’s TimeLineID: 1
Latest checkpoint’s PrevTimeLineID: 1
Latest checkpoint’s full_page_writes: on
Latest checkpoint’s NextXID: 0:555
Latest checkpoint’s NextOID: 12296
Latest checkpoint’s NextMultiXactId: 1
Latest checkpoint’s NextMultiOffset: 0
Latest checkpoint’s oldestXID: 548
Latest checkpoint’s oldestXID’s DB: 1
Latest checkpoint’s oldestActiveXID: 0
Latest checkpoint’s oldestMultiXid: 1
Latest checkpoint’s oldestMulti’s DB: 1
Latest checkpoint’s oldestCommitTsXid:0
Latest checkpoint’s newestCommitTsXid:0
Time of latest checkpoint: Sun 15 Apr 2018 07:20:58 AM EDT
Fake LSN counter for unlogged rels: 0/1
Minimum recovery ending location: 0/0
Min recovery ending loc’s timeline: 0
Backup start location: 0/0
Backup end location: 0/0
…
5 / 117
System Architecture
Main
Libpq
Postmaster
Postgres Postgres
Parse Statement
utility Utility
Traffic Cop
Command
Query e.g. CREATE TABLE, COPY
SELECT, INSERT, UPDATE, DELETE
Rewrite Query
Generate Paths
Optimal Path
Generate Plan
Plan
Execute Plan
6 / 117
Session Creation
()
rk
postmaster fo postgres postgres
7 / 117
Starting Postmaster
2018-04-15 07:23:18.172 EDT [12055] LOG: listening on IPv4 address "127.0.0.1", port 5432
2018-04-15 07:23:18.173 EDT [12055] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
2018-04-15 07:23:18.185 EDT [12056] LOG: database system was shut down at 2018-04-15 07:22:54 EDT
2018-04-15 07:23:18.188 EDT [12055] LOG: database system is ready to accept connections
• manually
• pg_ctl start
• on boot
8 / 117
Stopping Postmaster
• manually
• pg_ctl stop
• on shutdown
9 / 117
Connections
10 / 117
Authentication
• trust
• reject
• passwords
• scram-sha-256
• md5
• password (cleartext)
• local authentication
• socket permissions
• ’peer’ socket user name passing
• host ident using local identd
11 / 117
Authentication (continued)
• remote authentication
• host ident using pg_ident.conf
• kerberos
• gss
• sspi
• pam
• ldap
• radius
• cert
12 / 117
Access
13 / 117
pg_hba.conf Default
14 / 117
pg_hba.conf Example
15 / 117
Permissions
16 / 117
Data Directory
$ ls -CF
base/ pg_ident.conf pg_serial/ pg_tblspc/ postgresql.auto.conf
global/ pg_logical/ pg_snapshots/ pg_twophase/ postgresql.conf
pg_commit_ts/ pg_multixact/ pg_stat/ PG_VERSION postmaster.opts
pg_dynshmem/ pg_notify/ pg_stat_tmp/ pg_wal/
pg_hba.conf pg_replslot/ pg_subtrans/ pg_xact/
17 / 117
Database Directories
$ ls -CF global/
1136 1214_fsm 1261_vm 2671 2846 2967 6000_vm
1136_fsm 1214_vm 1262 2672 2846_vm 3592 6001
1136_vm 1232 1262_fsm 2676 2847 3592_vm 6002
1137 1233 1262_vm 2677 2964 3593 pg_control
1213 1260 2396 2694 2964_vm 4060 pg_filenode.map
1213_fsm 1260_fsm 2396_fsm 2695 2965 4060_vm pg_internal.init
1213_vm 1260_vm 2396_vm 2697 2966 4061
1214 1261 2397 2698 2966_vm 6000
$ ls -CF base/
1/ 12406/ 12407/ 16384/
$ ls -CF base/16384
112 1249_fsm 2606_vm 2652 2699 3081 3598_vm
113 1249_vm 2607 2653 2701 3085 3599
12242 1255 2607_fsm 2654 2702 3118 3600
12242_fsm 1255_fsm 2607_vm 2655 2703 3118_vm 3600_fsm
12242_vm 1255_vm 2608 2656 2704 3119 3600_vm
12244 1259 2608_fsm 2657 2753 3164 3601
12246 1259_fsm 2608_vm 2658 2753_fsm 3256 3601_fsm
…
18 / 117
Transaction/WAL Directories
$ ls -CF pg_wal/
000000010000000000000001 archive_status/
$ ls -CF pg_xact/
0000
19 / 117
Configuration Directories
$ ls -CF share/
conversion_create.sql postgres.bki snowball_create.sql
extension/ postgres.description sql_features.txt
information_schema.sql postgresql.conf.sample system_views.sql
pg_hba.conf.sample postgres.shdescription timezone/
pg_ident.conf.sample psqlrc.sample timezonesets/
pg_service.conf.sample recovery.conf.sample tsearch_data/
20 / 117
2. Configuration
https://www.flickr.com/photos/mwichary/
21 / 117
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.
22 / 117
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, run "pg_ctl reload", or execute
# "SELECT pg_reload_conf()". 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 parameters can be changed at run time
# with the "SET" SQL command.
#
# Memory units: kB = kilobytes Time units: ms = milliseconds
# MB = megabytes s = seconds
# GB = gigabytes min = minutes
# TB = terabytes h = hours
# d = days
23 / 117
Configuration File Location
# The default values of these variables are driven from the -D command-line
# option or PGDATA environment variable, represented here as ConfigDir.
24 / 117
Connections and Authentication
25 / 117
Security and Authentication
26 / 117
TCP/IP Control
27 / 117
Memory Usage
shared_buffers = 128MB # min 128kB
# (change requires restart)
#huge_pages = try # on, off, or try
# (change requires restart)
#temp_buffers = 8MB # min 800kB
#max_prepared_transactions = 0 # zero disables the feature
# (change requires restart)
# Caution: it is not advisable to set max_prepared_transactions nonzero unless
# you actively intend to use prepared transactions.
#work_mem = 4MB # min 64kB
#maintenance_work_mem = 64MB # min 1MB
#replacement_sort_tuples = 150000 # limits use of replacement selection sort
#autovacuum_work_mem = -1 # min 1MB, or -1 to use maintenance_work_mem
#max_stack_depth = 2MB # min 100kB
dynamic_shared_memory_type = posix # the default is the first option
# supported by the operating system:
# posix
# sysv
# windows
# mmap
# use none to disable dynamic shared memory
# (change requires restart)
28 / 117
Memory Usage (Continued)
Recovery
fsync
fsync
Disk Blocks
29 / 117
Sizing Shared Memory
Page In (bad)
Kernel
30 / 117
Disk and Kernel Resources
# - Disk -
31 / 117
Vacuum and Background Writer
# - Background Writer -
32 / 117
Asynchronous Behavior
# - Asynchronous Behavior -
33 / 117
Write-Ahead Log (WAL)
34 / 117
Write-Ahead Log (WAL)
35 / 117
Write-Ahead Logging (Continued)
Recovery
fsync
fsync
Disk Blocks
36 / 117
Checkpoints and Archiving
# - Archiving -
37 / 117
Write-Ahead Logging (Continued)
PostgreSQL Shared Buffer Cache Write−Ahead Log
111
000
000
111 111
000
000
111 111
000
000
111
Begin 1 000
111
1
000
111 000
111
1
000
111 000
111
1
000
111
111
000
000
111 111
000
000
111000
111
000
111 111
000
000
111000
111
000
111
000
111
1
000
111 000
111
000000
2 111
111
2
000
111 000
111
000000
1 111
111
2
000
111
111
000
000
111000
111
000
111 111
000
000
111
End 1 000
111
2 111
000
2 000
111
2
000111
111000 000
111
111111
000000 111
000
Rotate
000
111
000
111000
111
2 111
000
2
000
111
000
111
2
000111
111000 000
111
38 / 117
Sending Server
# Set these on the master and on any standby that will send replication data.
39 / 117
Primary Replication Server
40 / 117
Standby Replication Server
41 / 117
Standby Replication Server
42 / 117
Subscriber Server
43 / 117
Planner Method Tuning
#enable_bitmapscan = on
#enable_hashagg = on
#enable_hashjoin = on
#enable_indexscan = on
#enable_indexonlyscan = on
#enable_material = on
#enable_mergejoin = on
#enable_nestloop = on
#enable_seqscan = on
#enable_sort = on
#enable_tidscan = on
44 / 117
Planner Constants
45 / 117
Planner GEQO
#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
#geqo_seed = 0.0 # range 0.0-1.0
46 / 117
Miscellaneous Planner Options
47 / 117
Where To Log
48 / 117
Where To Log (rotation)
49 / 117
Where to Log (syslog)
#syslog_facility = ’LOCAL0’
#syslog_ident = ’postgres’
#syslog_sequence_numbers = on
#syslog_split_messages = on
50 / 117
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 = warning # values in order of decreasing detail:
# debug5
# debug4
# debug3
# debug2
# debug1
# info
# notice
# warning
# error
# log
# fatal
# panic
51 / 117
When to Log (Continued)
52 / 117
What to Log
#debug_print_parse = off
#debug_print_rewritten = off
#debug_print_plan = off
#debug_pretty_print = on
#log_checkpoints = off
#log_connections = off
#log_disconnections = off
#log_duration = off
#log_error_verbosity = default # terse, default, or verbose messages
#log_hostname = off
53 / 117
What To Log: Log_line_prefix
#log_line_prefix = ’%m [%p] ’ # special values:
# %a = application name
# %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
# %n = timestamp with milliseconds (as a Unix epoch)
# %i = command tag
# %e = SQL state
# %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., ’<%u%%%d> ’
54 / 117
What to Log (Continued)
# - Process Title -
55 / 117
Runtime Statistics
#track_activities = on
#track_counts = on
#track_io_timing = off
#track_functions = none # none, pl, all
#track_activity_query_size = 1024 # (change requires restart)
#stats_temp_directory = ’pg_stat_tmp’
# - Statistics Monitoring -
#log_parser_stats = off
#log_planner_stats = off
#log_executor_stats = off
#log_statement_stats = off
56 / 117
Autovacuum
57 / 117
Autovacuum
58 / 117
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
#default_transaction_deferrable = off
#session_replication_role = ’origin’
#statement_timeout = 0 # in milliseconds, 0 is disabled
#lock_timeout = 0 # in milliseconds, 0 is disabled
#idle_in_transaction_session_timeout = 0 # in milliseconds, 0 is disabled
#vacuum_freeze_min_age = 50000000
#vacuum_freeze_table_age = 150000000
#vacuum_multixact_freeze_min_age = 5000000
#vacuum_multixact_freeze_table_age = 150000000
#bytea_output = ’hex’ # hex, escape
#xmlbinary = ’base64’
#xmloption = ’content’
#gin_fuzzy_search_limit = 0
#gin_pending_list_limit = 4MB
59 / 117
Locale, Formatting, and Full Text Search
datestyle = ’iso, mdy’
#intervalstyle = ’postgres’
timezone = ’US/Eastern’
#timezone_abbreviations = ’Default’ # Select the set of available time zone
# abbreviations. Currently, there are
# Default
# Australia (historical usage)
# India
# You can create your own file in
# share/timezonesets/.
#extra_float_digits = 0 # min -15, max 3
#client_encoding = sql_ascii # actually, defaults to database
# encoding
#dynamic_library_path = ’$libdir’
#local_preload_libraries = ’’
#session_preload_libraries = ’’
61 / 117
Lock Management
#deadlock_timeout = 1s
#max_locks_per_transaction = 64 # min 10
# (change requires restart)
#max_pred_locks_per_transaction = 64 # min 10
# (change requires restart)
#max_pred_locks_per_relation = -2 # negative values mean
# (max_pred_locks_per_transaction
# / -max_pred_locks_per_relation) - 1
#max_pred_locks_per_page = 2 # min 0
62 / 117
Version/Platform Compatibility
#array_nulls = on
#backslash_quote = safe_encoding # on, off, or safe_encoding
#default_with_oids = off
#escape_string_warning = on
#lo_compat_privileges = off
#operator_precedence_warning = off
#quote_all_identifiers = off
#standard_conforming_strings = on
#synchronize_seqscans = on
#transform_null_equals = off
63 / 117
Error Handling
64 / 117
Config File Includes
65 / 117
Interfaces
• Installing
• Compiled Languages (C, ecpg)
• Scripting Language (Perl, Python, PHP)
• SPI
• Connection Pooling
66 / 117
Include Files
$ ls -CF include/
ecpg_config.h libpq/ pgtypes_date.h sql3types.h
ecpgerrno.h libpq-events.h pgtypes_error.h sqlca.h
ecpg_informix.h libpq-fe.h pgtypes_interval.h sqlda-compat.h
ecpglib.h pg_config_ext.h pgtypes_numeric.h sqlda.h
ecpgtype.h pg_config.h pgtypes_timestamp.h sqlda-native.h
informix/ pg_config_manual.h postgres_ext.h
internal/ pg_config_os.h server/
67 / 117
Library Files
$ ls -CF lib/
ascii_and_mic.so* libpgcommon.a utf8_and_ascii.so*
cyrillic_and_mic.so* libpgfeutils.a utf8_and_big5.so*
dict_snowball.so* libpgport.a utf8_and_cyrillic.so*
euc2004_sjis2004.so* libpgtypes.a utf8_and_euc2004.so*
euc_cn_and_mic.so* libpgtypes.so@ utf8_and_euc_cn.so*
euc_jp_and_sjis.so* libpgtypes.so.3@ utf8_and_euc_jp.so*
euc_kr_and_mic.so* libpgtypes.so.3.10* utf8_and_euc_kr.so*
euc_tw_and_big5.so* libpq.a utf8_and_euc_tw.so*
latin2_and_win1250.so* libpq.so@ utf8_and_gb18030.so*
latin_and_mic.so* libpq.so.5@ utf8_and_gbk.so*
libecpg.a libpq.so.5.10* utf8_and_iso8859_1.so*
libecpg_compat.a libpqwalreceiver.so* utf8_and_iso8859.so*
libecpg_compat.so@ pgoutput.so* utf8_and_johab.so*
libecpg_compat.so.3@ pgxs/ utf8_and_sjis2004.so*
libecpg_compat.so.3.10* pkgconfig/ utf8_and_sjis.so*
libecpg.so@ plperl.so* utf8_and_uhc.so*
libecpg.so.6@ plpgsql.so* utf8_and_win.so*
libecpg.so.6.10* plpython2.so*
68 / 117
3. Maintenance
69 / 117
Backup
70 / 117
Continuous Archiving / Point-In-Time Recovery (PITR)
0
:0
:0
:0
:0
02
09
11
13
WAL AL AL
W W
71 / 117
PITR Backup Procedures
1. archive_mode = on
2. wal_level = archive
3. archive_command = ’cp -i %p /mnt/server/pgsql/%f < /dev/null’
4. SELECT pg_start_backup(’label’);
5. Perform file system-level backup (can be inconsistent)
6. SELECT pg_stop_backup();
pg_basebackup does this automatically.
72 / 117
PITR Recovery
5
:0
:3
:4
:5
17
17
17
17
WAL
AL AL
W W
73 / 117
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. restore_command = ’cp /mnt/server/pgsql/%f %p’
6. Start the postmaster
74 / 117
Continuous Archive Management
75 / 117
Data Maintenance
• VACUUM (nonblocking) records free space into .fsm (free space map) files
• ANALYZE collects optimizer statistics
• VACUUM FULL (blocking) shrinks the size of database disk files
76 / 117
Automating Tasks
77 / 117
Checkpoints
78 / 117
4. Monitoring
79 / 117
ps
$ ps -f -Upostgres
postgres 825 1 0 Tue12AM ?? 0:06.57 /u/pgsql/bin/postmaster -i
postgres 829 825 0 Tue12AM ?? 0:35.03 writer process (postmaster)
postgres 830 825 0 Tue12AM ?? 0:16.07 wal writer process (postmaster)
postgres 831 825 0 Tue12AM ?? 0:11.34 autovacuum launcher process (postmaster)
postgres 832 825 0 Tue12AM ?? 0:07.63 stats collector process (postmaster)
postgres 13003 825 0 3:44PM ?? 0:00.01 postgres test [local] idle (postmaster)
postgres 13002 12997 0 3:44PM ttyq1 0:00.03 /u/pgsql/bin/psql test
80 / 117
top
$ top -c
top - 10:29:47 up 23 days, 18:53, 6 users, load average: 1.73, 1.49, 0.81
Tasks: 387 total, 2 running, 385 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.9 us, 0.5 sy, 0.0 ni, 93.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 24734444 total, 19187724 used, 5546720 free, 532280 buffers
KiB Swap: 6369276 total, 168292 used, 6200984 free. 16936936 cached Mem
81 / 117
Query Monitoring
test=> SELECT * FROM pg_stat_activity;
…
datid | 16384
datname | test
pid | 16382
usesysid | 10
usename | postgres
application_name | psql
client_addr |
client_hostname |
client_port | -1
backend_start | 2018-04-15 09:00:26.467813-04
xact_start | 2018-04-15 09:00:48.028667-04
query_start | 2018-04-15 09:00:48.028667-04
state_change | 2018-04-15 09:00:48.028671-04
wait_event_type |
wait_event |
state | active
backend_xid |
backend_xmin | 556
query | SELECT * FROM pg_stat_activity;
backend_type | client backend
82 / 117
Access Statistics
83 / 117
Database Statistics
84 / 117
Table Activity
test=> SELECT * FROM pg_stat_all_tables;
-[ RECORD 10 ]---+------------------------
relid | 2616
schemaname | pg_catalog
relname | pg_opclass
seq_scan | 2
seq_tup_read | 2
idx_scan | 99
idx_tup_fetch | 99
n_tup_ins | 0
n_tup_upd | 0
n_tup_del | 0
n_tup_hot_upd | 0
n_live_tup | 0
n_dead_tup | 0
last_vacuum |
last_autovacuum |
last_analyze |
last_autoanalyze |
85 / 117
Table Block Activity
86 / 117
Analyzing Activity
87 / 117
CPU
$ 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 id
1 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 46
4 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
88 / 117
I/O
$ iostat 5
tty sd0 sd1 sd2 % cpu
tin tout sps tps msps sps tps msps sps tps msps usr nic sys int idl
7 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 93
24 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
89 / 117
Disk Usage
90 / 117
Database File Mapping - oid2name
$ oid2name
All databases:
---------------------------------
18720 = test1
1 = template1
18719 = template0
18721 = test
18735 = postgres
18736 = cssi
91 / 117
Table File Mapping
$ cd /usr/local/pgsql/data/base
$ oid2name
All databases:
---------------------------------
16817 = test2
16578 = x
16756 = test
1 = template1
16569 = template0
16818 = test3
16811 = floattest
$ cd 16756
$ ls 1873*
18730 18731 18732 18735 18736 18737 18738 18739
92 / 117
Table File Mapping
$ oid2name -d test -o 18737
Tablename of oid 18737 from database "test":
---------------------------------
18737 = ips
94 / 117
Per-Database Tablespaces
97 / 117
Miscellaneous Tasks
98 / 117
Administration Tools
• pgadmin
• phppgadmin
99 / 117
External Monitoring Tools
100 / 117
Monitoring Summary
Alterting /
Reporting Aggregation
time
101 / 117
5. Recovery
https://www.flickr.com/photos/coastguardnews/
102 / 117
Client Application Crash
103 / 117
Graceful Postgres Server Shutdown
104 / 117
Abrupt Postgres Server Crash
105 / 117
Operating System Crash
Nothing Required. Transactions in progress are rolled back. Partial page writes are
repaired.
106 / 117
Disk Failure
107 / 117
Accidental DELETE
Recover table from previous backup, perhaps using pg_restore. It is possible to modify
the backend code to make deleted tuples visible, dump out the deleted table and restore
the original code. All tuples in the table since the previous vacuum will be visible. It is
possible to restrict that so only tuples deleted by a specific transaction are visible.
108 / 117
Write-Ahead Log (WAL) Corruption
See pg_resetwal. Review recent transactions and identify any damage, including partially
committed transactions.
109 / 117
File Deletion
It may be necessary to create an empty file with the deleted file name so the object can be
deleted, and then the object restored from backup.
110 / 117
Accidental DROP TABLE
111 / 117
Accidental DROP INDEX
Recreate index.
112 / 117
Accidental DROP DATABASE
113 / 117
Non-Starting Installation
Restart problems are usually caused by write-ahead log problems. See pg_resetwal.
Review recent transactions and identify any damage, including partially committed
transactions.
114 / 117
Index Corruption
Use REINDEX.
115 / 117
Table Corruption
Try reindexing the table. Try identifying the corrupt OID of the row and transfer the
valid rows into another table using SELECT…INTO…WHERE oid != ###. Use
pageinspect to analyze the internal structure of the table.
116 / 117
Conclusion
https://momjian.us/presentations
117 / 117