How it works…There's more… Planning a new database Getting ready How to do it… There's more… Adding an external module to PostgreSQL Getting ready How to do i
Trang 2PostgreSQL 10 Administration Cookbook
Over 165 effective recipes for database management and maintenance in PostgreSQL 10
Simon Riggs
Gianni Ciolli
Trang 3BIRMINGHAM - MUMBAI
Trang 5PostgreSQL 10 Administration Cookbook
Copyright © 2018 Packt Publishing
All rights reserved No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy of the information presented However, the information contained in this book is sold without warranty, either express or implied Neither the author(s), nor Packt Publishing or its dealers and distributors, will be held liable for any damages caused
or alleged to have been caused directly or indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals However, Packt Publishing cannot guarantee the accuracy of this information.
Commissioning Editor: Amey Varangaonkar
Acquisition Editor: Namrata Patil
Content Development Editor: Amrita Noronha
Technical Editor: Sneha Hanchate
Copy Editor: Safis
Project Coordinator: Shweta Birwatkar
Proofreader: Safis Editing
Indexer: Pratik Shirodkar
Graphics: Jisha Chirayil
Production Coordinator: Shraddha Falebhai
First published: April 2017
Trang 6Mapt is an online digital library that gives you full access to over 5,000 books and videos, as well asindustry leading tools to help you plan your personal development and advance your career For moreinformation, please visit our website
Trang 7Why subscribe?
Spend less time learning and more time coding with practical eBooks and Videos from over4,000 industry professionals
Improve your learning with Skill Plans built especially for you
Get a free eBook or video every month
Mapt is fully searchable
Copy and paste, print, and bookmark content
Trang 8Did you know that Packt offers eBook versions of every book published, with PDF and ePub filesavailable? You can upgrade to the eBook version at www.PacktPub.com and as a print book customer, youare entitled to a discount on the eBook copy Get in touch with us at service@packtpub.com for more
details
At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of freenewsletters, and receive exclusive discounts and offers on Packt books and eBooks
Trang 9Contributors
Trang 10About the authors
Simon Riggs is the CTO of 2ndQuadrant, having contributed to PostgreSQL as a major developer and
committer for 14 years He has written and designed features for replication, performance,
BI, management, and security Under his guidance, 2ndQuadrant is now a leading developer of opensource PostgreSQL, serving hundreds of clients in USA, Europe, and worldwide Simon is a frequentspeaker at many conferences on PostgreSQL Futures He has worked as a database architect for 30years
Gianni Ciolli is the head of professional services at 2ndQuadrant PostgreSQL consultant, trainer, and
speaker at many PostgreSQL conferences in Europe and abroad since the last 10 years He has a PhD
in Mathematics from the University of Florence He has worked with free and open source softwaresince the 1990s and is active in the community (Prato Linux User Group and Italian PostgreSQL UsersGroup) He lives in London with his son His other interests include music, drama, poetry, and
athletics
Trang 11About the reviewer
Sheldon Strauch is a 23-year veteran of software consulting at IBM, Sears, Ernst & Young, and Kraft
Foods Having a bachelor's degree in business administration, he leverages his technical skills toimprove business' self-awareness He is interested in data gathering, management, and mining; mapsand mapping; business intelligence; and application of data analysis He is currently focusing on thedevelopment of data management and mining at Enova International at Chicago At his leisure, heenjoys performing arts, music, and traveling with his wife, Marilyn
Trang 12Packt is searching for authors like you
If you're interested in becoming an author for Packt, please visit authors.packtpub.com and apply today
We have worked with thousands of developers and tech professionals, just like you, to help themshare their insight with the global tech community You can make a general application, apply for aspecific hot topic that we are recruiting an author for, or submit your own idea
Trang 13Table of Contents
Title Page
Copyright and Credits
PostgreSQL 10 Administration Cookbook
Packt Upsell
Why subscribe?
PacktPub.com
Contributors
About the authors
About the reviewer
Packt is searching for authors like you
Preface
Who this book is for
What this book covers
To get the most out of this book
Download the example code files Download the color images Conventions used
Sections
Getting ready How to do it…
How it works…
There's more…
See also Get in touch
Reviews
1 First Steps
Introduction
Introducing PostgreSQL 10 What makes PostgreSQL different? Robustness
Security Ease of use Extensibility Performance and concurrency Scalability
SQL and NoSQL Popularity Commercial support Research and development funding Getting PostgreSQL
Trang 14How it works…
There's more…
See also Enabling access for network/remote users How to do it…
How it works…
There's more…
See also Using graphical administration tools How to do it…
How it works…
OmniDB
See also Using the psql query and scripting tool Getting ready
How to do it…
How it works…
There's more…
See also Changing your password securely
How to do it…
How it works…
Avoiding hardcoding your password
Getting ready How to do it…
Getting ready How to do it
How it works
There's more…
Locating the database server's message log
Trang 15Getting ready How to do it
How it works
There's more
Locating the database's system identifier
Getting ready How to do it…
Getting ready How to do it…
How it works…
There's more…
Understanding object dependencies
Getting ready How to do it…
Trang 16How it works…
There's more…
Planning a new database
Getting ready How to do it…
There's more…
Adding an external module to PostgreSQL
Getting ready How to do it…
Installing modules using a software installer Installing modules from PGXN
Installing modules from a manually downloaded package Installing modules from source code
How it works
Using an installed module
Getting ready How to do it…
Trang 17Starting the database server manually
Trang 18Getting ready How to do it…
There's more…
5 Tables and Data
Choosing good names for database objects
Getting ready How to do it…
There's more…
Handling objects with quoted names
Getting ready How to do it
How it works…
There's more…
Enforcing the same name and definition for columns
Getting ready How to do it
How it works…
There's more…
Identifying and removing duplicates
Getting ready How to do it…
How it works…
There's more…
Preventing duplicate rows
Getting ready How to do it…
How it works…
There's more
Duplicate indexes Uniqueness without indexes Real-world example – IP address range allocation Real-world example – range of time
Real-world example – prefix ranges Finding a unique key for a set of data
Getting ready How to do it…
How to do it…
How it works
Loading data from a spreadsheet
Getting ready How to do it
How it works
Trang 19There's more
Loading data from flat files
Getting ready How to do it
Revoking user access to a table
Getting ready How to do it…
How it works…
There's more…
Database creation scripts Default search path Securing views Granting user access to a table
Getting ready How to do it…
How it works
There's more…
Access to the schema Granting access to a table through a group role Granting access to all objects in a schema Granting user access to specific columns
Getting ready How to do it…
How it works…
There's more…
Granting user access to specific rows
Getting ready How to do it…
How it works…
There's more
Creating a new user
Getting ready How to do it
How it works…
There's more…
Temporarily preventing a user from connecting
Getting ready
Trang 20Writing a debugging_info function for developers
Auditing database access
Getting ready
Auditing SQL
Auditing table access
Managing the audit log
Auditing data changes
Always knowing which user is logged in
Getting ready
How to do it…
How it works…
There's more…
Not inheriting user attributes
Integrating with LDAP
Getting ready
How to do it…
How it works…
There's more…
Setting up the client to use LDAP
Replacement for the User Name Map feature
Getting the SSL key and certificate
Setting up a client to use SSL
Checking server authenticity
Using SSL certificates to authenticate
Getting ready
How to do it…
How it works…
Trang 21How it works…
There's more…
Encrypting sensitive data
Getting ready How to do it…
How it works…
There's more…
Using psql variables
Getting ready How to do it…
How it works…
There’s more…
Placing query output into psql variables
Getting ready How to do it…
How it works…
There’s more…
Writing a conditional psql script
Getting ready How to do it…
How it works…
There’s more…
Investigating a psql error
Getting ready How to do it…
There's more…
Performing actions on many tables
Trang 22Using schema-level privileges
Moving objects between schemas
Trang 23There's more…
Updatable views
Getting ready How to do it…
How it works…
There's more…
Using materialized views
Getting ready How to do it…
How it works…
There's more…
8 Monitoring and Diagnosis
Providing PostgreSQL information to monitoring tools
Finding more information about generic monitoring tools Real-time viewing using pgAdmin or OmniDB
Getting ready How to do it… (with pgAdmin) How to do it… (with OmniDB) Checking whether a user is connected
Getting ready How to do it…
How it works…
There's more…
No need for the = true part
Do we catch all queries waiting on locks?
Knowing who is blocking a query
Getting ready How to do it…
How it works…
Trang 24Killing a specific session
How to do it…
How it works…
There's more…
Try to cancel the query first
What if the backend won't terminate?
Using statement_timeout to clean up queries that take too long to run Killing idle in transaction queries
Killing the backend from the command line
Detecting an in-doubt prepared transaction
The quick-and-dirty way
Collecting daily usage statistics
Knowing when a table was last used
Finding out whether a temporary file is in use any more
Logging temporary file usage
Understanding why queries slow down
Getting ready
How to do it…
How it works…
There's more…
Do the queries return significantly more data than they did earlier?
Do the queries also run slowly when they are run alone?
Is the second run of the same query also slow?
Table and index bloat
Trang 25Analyzing the real-time performance of your queries Getting ready
How it works…
There's more…
See also Avoiding auto-freezing and page corruptions
How to do it…
Removing issues that cause bloat
Getting ready How to do it…
How it works…
There's more…
Removing old prepared transactions
Getting ready How to do it…
How it works…
There's more…
Maintaining indexes
Getting ready How to do it…
Trang 26Getting ready How to do it…
How it works…
There's more…
Collect regular statistics from pg_stat* views
Getting ready How to do it…
There's more…
Not enough CPU power or disk I/O capacity for the current load Locking problems
EXPLAIN options See also
Reducing the number of rows returned
How to do it…
There's more…
See also Simplifying complex SQL queries
Getting ready How to do it…
There's more…
Using materialized views (long-living, temporary tables) Using set-returning functions for some parts of queries Speeding up queries without rewriting them
How to do it…
Increasing work_mem More ideas with indexes There's more…
Time Series Partitioning Using a TABLESAMPLE view
In case of many updates, set fillfactor on the table Rewriting the schema – a more radical approach Discovering why a query is not using an index
Getting ready How to do it…
Trang 27How it works…
There's more…
Forcing a query to use an index
Getting ready How to do it…
How to do it…
How it works…
See also Backups of database object definitions How to do it…
How to do it…
How it works…
Recovery of all databases
Trang 28Getting ready
How to do it…
Logical – from custom dump taken with pg_dump -F c Logical – from the script dump created by pg_dump -F p Logical – from the script dump created by pg_dumpall Physical
Logical - from custom dump taken with pg_dump -F c
Logical – from the script dump
Logical – from the custom dump -F c
Logical – from the script dump created by pg_dump Logical – from the script dump created by pg_dumpall Physical
Improving performance of backup/recovery
Trang 2912 Replication and Upgrades
Replication concepts
Topics Basic concepts History and scope Practical aspects Data loss
Single-master replication Multinode architectures Clustered or massively parallel databases Multimaster replication
Scalability tools Other approaches to replication Replication best practices
Getting ready How to do it…
Getting ready How to do it…
How it works…
There's more…
Setting up streaming replication security
Getting ready How to do it…
How it works…
There's more…
Hot Standby and read scalability
Getting ready How to do it…
How it works…
Managing streaming replication
Getting ready How to do it…
There's more…
See also Using repmgr
Getting ready How to do it…
How it works…
There's more…
Using replication slots
Trang 30Other Books You May Enjoy
Leave a review - let other readers know what you think
Trang 31community Most of all, it just works!
One of the clearest benefits of PostgreSQL is that it is open source, meaning that you have a verypermissive license to install, use, and distribute PostgreSQL without paying anyone any fees or
royalties On top of that, PostgreSQL is well-known as a database that stays up for long periods, andrequires little or no maintenance in many cases Overall, PostgreSQL provides a very low total cost
of ownership
PostgreSQL Administration Cookbook offers the information you need to manage your live
production databases on PostgreSQL The book contains insights direct from the main author of thePostgreSQL replication and recovery features and the rest of the team at 2ndQuadrant This hands-onguide will assist developers working on live databases, supporting web or enterprise software
applications using Java, Python, Ruby, and Net from any development framework It's easy to manageyour database when you've got PostgreSQL 10 Administration Cookbook at hand
This practical guide gives you quick answers to common questions and problems, building on theauthor's experience as trainers, users, and core developers of the PostgreSQL database server
Each technical aspect is broken down into short recipes that demonstrate solutions with workingcode, and then explain why and how that works The book is intended to be a desk reference for bothnew users and technical experts
The book covers all the latest features available in PostgreSQL 10 Soon you will be running a
smooth database with ease!
Trang 32Who this book is for
This book is for system administrators, database administrators, architects, developers, and anyonewith an interest in planning for or running live production databases This book is most suited to thosewho have some technical experience
Trang 33What this book covers
Chapter 1, First Steps, covers topics such as an introduction to PostgreSQL 10, downloading and
installing PostgreSQL 10, connecting to a PostgreSQL server, enabling server access to
network/remote users, using graphical administration tools, using psql query and scripting tools,
changing your password securely, avoiding hardcoding your password, using a connection servicefile, and troubleshooting a failed connection
Chapter 2, Exploring the Database, helps you identify the version of the database server you are
using and also the server uptime It helps you locate the database server files, database server
message log, and database's system identifier It lets you list a database on the database server,
contains recipes that let you know the number of tables in your database, how much disk space is used
by the database and tables, which are the biggest tables, how many rows a table has, how to estimaterows in a table, and how to understand object dependencies
Chapter 3, Configuration, covers topics such as reading the fine manual (RTFM), planning a new
database, changing parameters in your programs, the current configuration settings, parameters thatare at non-default settings, updating the parameter file, setting parameters for particular groups ofusers, basic server configuration checklist, adding an external module into the PostgreSQL server,and running the server in power saving mode
Chapter 4, Server Control, provides information about starting the database server manually,
stopping the server quickly and safely, stopping the server in an emergency, reloading the server
configuration files, restarting the server quickly, preventing new connections, restricting users to justone session each, and pushing users off the system It contains recipes that help you decide on a
design for multi-tenancy, how to use multiple schemas, giving users their own private database,
running multiple database servers on one system, and setting up a connection pool
Chapter 5, Tables and Data, guides you through the process of choosing good names for database
objects, handling objects with quoted names, enforcing same name, same definition for columns,
identifying and removing duplicate rows, preventing duplicate rows, finding a unique key for a set ofdata, generating test data, randomly sampling data, loading data from a spreadsheet, and loading datafrom flat files
Chapter 6, Security, provides recipes on revoking user access to a table, granting user access to a
table, creating a new user, temporarily preventing a user from connecting, removing a user withoutdropping their data, checking whether all users have a secure password, giving limited super userpowers to specific users, auditing DDL changes, auditing data changes, integrating with LDAP,
connecting using SSL, and encrypting sensitive data
Chapter 7, Database Administration, provides recipes on useful topics such as writing a script
wherein either all succeed or all fail, writing a psql script that exits on the first error, performingactions on many tables, adding/removing columns on tables, changing the data type of a column,
Trang 34adding/removing schemas, moving objects between schemas, adding/removing tablespaces, movingobjects between tablespaces, accessing objects in other PostgreSQL databases, and making
views updateable
Chapter 8, Monitoring and Diagnosis, provides recipes that answer questions such as is the user
connected?, what are they running?, are they active or blocked?, who is blocking them?, is anybodyusing a specific table?, when did anybody last use it?, how much disk space is used by temporarydata?, and why are my queries slowing down? It also helps you in investigating and reporting a bug,producing a daily summary report of logfile errors, killing a specific session, and resolving an in-doubt prepared transaction
Chapter 9, Regular Maintenance, provides useful recipes on controlling automatic database
maintenance, avoiding auto freezing and page corruptions, avoiding transaction wraparound,
removing old prepared transactions, actions for heavy users of temporary tables, identifying and
fixing bloated tables and indexes, maintaining indexes, finding unused indexes, carefully removingunwanted indexes, and planning maintenance
Chapter 10, Performance and Concurrency, covers topics such as finding slow SQL statements,
collecting regular statistics from pg_stat* views, finding what makes SQL slow, reducing the number
of rows returned, simplifying complex SQL, speeding up queries without rewriting them, why is myquery not using an index?, how do I force a query to use an index?, using optimistic locking, and
reporting performance problems And of course, the new parallel query features
Chapter 11, Backup and Recovery, insists that backups are essential, though they also devote only a
very small amount of time to thinking about the topic So, this chapter provides useful informationabout backup and recovery of your PostgreSQL database through recipes on understanding and
controlling crash recovery, planning backups, hot logical backup of one database, hot logical backup
of all databases, hot logical backup of all tables in a tablespace, backup of database object
definitions, standalone hot physical database backup, hot physical backup and continuous archiving Italso includes topics such as recovery of all databases, recovery to a point in time, recovery of a
dropped/damaged table, recovery of a dropped/damaged database, recovery of a dropped/damagedtablespace, improving performance of backup/recovery, and incremental/differential backup
and restore
Chapter 12, Replication and Upgrades, explains that replication isn't magic, though it can be pretty
cool It's even cooler when it works, and that's what this chapter is all about This chapter coversreplication concepts, replication best practices, setting up file-based log shipping replication, setting
up streaming log replication, managing log shipping replication, managing Hot Standby, synchronousreplication, upgrading to a new minor release, in-place major upgrades, major upgrades online, pluslogical replication and Postgres-BDR
Trang 35To get the most out of this book
In order for this book to be useful, you need at least access to a PostgreSQL client that is allowed toexecute queries on a server Ideally, you'll also be the server administrator Full client and serverpackages for PostgreSQL are available for most popular operating systems at http://www.postgresql.org/d ownload/ All the examples here are executed at a Command Prompt, usually running the psql program.This makes them applicable to most platforms It's straightforward to do many of these operationsinstead using a GUI tool for PostgreSQL, such as pgAdmin or OmniDB
Trang 36Download the example code files
You can download the example code files for this book from your account at www.packtpub.com If youpurchased this book elsewhere, you can visit www.packtpub.com/support and register to have the filesemailed directly to you
You can download the code files by following these steps:
1 Log in or register at www.packtpub.com
2 Select the SUPPORT tab
3 Click on Code Downloads & Errata
4 Enter the name of the book in the Search box and follow the onscreen instructions
Once the file is downloaded, please make sure that you unzip or extract the folder using the latestversion of:
WinRAR/7-Zip for Windows
Zipeg/iZip/UnRarX for Mac
7-Zip/PeaZip for Linux
The code bundle for the book is also hosted on GitHub at Administration-Cookbook In case there's an update to the code, it will be updated on the existing GitHubrepository
https://github.com/PacktPublishing/PostgreSQL-10-We also have other code bundles from our rich catalog of books and videos available at https://github com/PacktPublishing/ Check them out!
Trang 37Download the color images
We also provide a PDF file that has color images of the screenshots/diagrams used in this book Youcan download it here: http://www.packtpub.com/sites/default/files/downloads/PostgreSQL10AdministrationCookbook_ ColorImages.pdf
Trang 38Conventions used
There are a number of text conventions used throughout this book
CodeInText: Indicates code words in text, database table names, folder names, filenames, file
extensions, pathnames, dummy URLs, user input, and Twitter handles Here is an example: "Mount thedownloaded WebStorm-10*.dmg disk image file as another disk in your system."
A block of code is set as follows:
CREATE USER repuser
SUPERUSER
LOGIN
CONNECTION LIMIT 1
ENCRYPTED PASSWORD 'changeme';
When we wish to draw your attention to a particular part of a code block, the relevant lines or itemsare set in bold:
SELECT *FROM mytable
WHERE (col1, col2, … ,colN) IN
(SELECT col1, col2, … ,colN
FROM mytable
GROUP BY col1, col2, … ,colN
HAVING count(*) > 1);
Any command-line input or output is written as follows:
$ postgres single -D /full/path/to/datadir postgres
Bold: Indicates a new term, an important word, or words that you see onscreen For example, words
in menus or dialog boxes appear in the text like this Here is an example: "Select System info from theAdministration panel."
Warnings or important notes appear like this.
Tips and tricks appear like this.
Trang 39In this book, you will find several headings that appear frequently (Getting ready, How to do it ,
How it works , There's more , and See also).
To give clear instructions on how to complete a recipe, use these sections as follows:
Trang 40Getting ready
This section tells you what to expect in the recipe and describes how to set up any software or anypreliminary settings required for the recipe