Appendix A. Install, Hosting, and Command-Line Guides

Installation Guides and Distributions

Windows, Mac OS X, Linux Desktops

EnterpriseDB, a company devoted to popularizing PostgreSQL technology, builds installers for Windows, Mac OS X, and desktop versions of Linux. For Windows users, this is the preferred installer to use. Mac OS X and Linux opinions vary depending on what you are doing. For example, the EnterpriseDb PostGIS installers for Mac OS X and Linux aren’t always kept up to date with the latest releases of PostGIS, so PostGIS Mac OS X and Linux users, tend to prefer other distributions. EnterpriseDb also distribute binaries for beta versions of coming PostgreSQL versions. The installers are super easy to use. They come packaged with PgAdmin GUI Administration tool and a stack builder that allows you to install additional add-ons like JDBC, .NET drivers, Ruby, PostGIS, phpPgAdmin, pgAgent, WaveMaker, and others.

EnterpriseDB has two offerings: the official, open source PostgreSQL, which EnterpriseDB calls the Community Edition, and their proprietary edition called Advanced Plus. The proprietary fork offers Oracle compatibility and enhanced management features. Don’t get confused between the two when you download. In this book, we will focus on the official PostgreSQL, not Advanced Plus; however, much of the material apply more or less equally to Advanced Plus.

Note

If you want to try out different versions of PostgreSQL on the same machine or want to run it from a USB device. EnterpriseDB also offers binaries in addition to installers. Read this article on our site at PostgreSQL in Windows without Install for further guidance.

Other Linux, Unix, Mac Distributions

Most Unix/Linux distributions come packaged with some version of PostgreSQL, though the version they come with is usually not the latest and greatest. To compensate for this, many people use backports.

PostgreSQL Yum Repositories

For adventurous Linux users, you can always download the latest and greatest PostgreSQL, including the developmental versions by going to the PostgreSQL Yum repository. Not only will you find the core server, but you can also retrieve popular extensions like PL, PostGIS, and many more. At the time of this writing, Yum is available for Fedora 14-16, Red Hat Enterprise 4-6, CentOS 4-6, Scientific Linux 5-6. If you have older versions of the OS or still use PostgreSQL 8.3, you should check the documentations for what’s maintained. If you use Yum for the install, we prefer this Yum distro because it is managed by PostgreSQL group; it is actively maintained by PostgreSQL developers and always releases patches and updates as soon as they are available. We have instructions for installing using Yum in the Yum section of our PostgresOnLine journal site.

Ubuntu, Debian, OpenSUSE

Ubuntu is generally good about staying up to date with latest versions of PostgreSQL. Debian tends to be a bit slower. You can usually get the latest PostgreSQL on most recent versions of Ubuntu/Debian using a command along the lines of:

sudo apt-get install postgresql-server-9.1

If you plan to be compiling any of the other additional add-ons not generally packaged with PostgreSQL, such as the PostGIS or R, then you’ll want to also install the development libraries:

sudo apt-get install postgresql-server-dev-9.1

If you want to try the latest and greatest of PostgreSQL and not have to compile yourself, or the version of Ubuntu/Debian you have doesn’t have the latest version of PostgreSQL, then you’ll want to go with a backport. Here are some that people use:

  • OpenSCG Red Hat, Debian, Ubuntu, and OpenSuse PostgreSQL packages have PostgreSQL for latest stable and beta releases of PostgreSQL.

  • Martin Pitt backports usually keeps Ubuntu installs for PostgreSQL two versions plus latest beta release of PostgreSQL. It also has releases currently for lucid, natty, and oneiric for core PostgreSQL and postgresql extensions.

  • If you are interested in PostgreSQL for the GIS offerings, then UbuntuGIS may be something to check out for the additional add-ons like PostGIS and pgRouting, in addition to some other non-PostgreSQL-related GIS toolkits it offers.

FreeBSD

FreeBSD is a popular choice for PostgreSQL install. However, many people who use FreeBSD tend to compile their own directly from source rather than using a Port or package distribution. You can find even the latest beta versions of PostgreSQL on the FreeBSD database section of FreeBSD ports site.

Mac OS X

There are several ways of installing PostgreSQL on Mac OS X that we’ve seen people use. There is the EnterpriseDb desktop install, which we already mentioned. Many have complained since it installs in a non-standard location, and it doesn’t play well when it wants to receive other add-ons. There is also HomeBrew, which seems to be gaining a lot of popularity; and there’s KyngChaos, for people who want a relatively smooth, but very up to date GIS experience. Lastly, there is the standard MacPorts.

  • Installing PostgreSQL 9.0 using Homebrew gives step-by-step instructions of using HomeBrew to install PostgreSQL 9. Similar steps can be done for newer PostgreSQL.

  • KyngChaos PostgreSQL + GIS has the latest release package of PostgreSQL and PostGIS 2.0, as well as pgRouting. However, the packages distributed by KyngChaos are incompatible with the EnterpriseDb ones, so if you want to use KyngChaos, you’ll need to use the PostgreSQL 9.1 packaged with it as well.

  • Fink and MacPorts.

Where to Host PostgreSQL

You can always install and use PostgreSQL on your own server and your own LAN, but for applications running on the Internet, you may want to look for a hosting company with scalable servers and reliable bandwidth. You should avoid shared hosting environments. Though they are ridiculously cheap, you’re relegated to having little or no control over the server itself. The database that usually comes stock is MySQL or an antiquated version of PostgreSQL. Unless you’re running a fly-by-night website, we don’t recommend shared hosting.

Before the advent of virtualization and cloud computing, the only alternative to shared hosting was to have your own dedicated server. This can be a server that you lease from the hosting company or your own server placed at a hosting facility. This tried-and-true arrangement is still the way to go for large operations requiring many powerful servers and a thirst for bandwidth. With your own server, you dictate the OS and the PostgreSQL version. The drawbacks are that it does take a few days for the hosting company to build your leased rig and expect little support from the hosting company should you have a software problem. Placing your own server at a secure hosting facility tends to give you the best reliability in terms of connectivity since these facilities are built with redundancy in mind, but you’ll have to maintain your own server. This means having to dispatch your own technician to the hosting site, or even placing your own IT personnel permanently at the hosting facility.

With rampant virtualization of servers, cloud hosting gained popularity in the last few years. It fills a nice gap between restrictive shared hosting and dedicated hosting which required a high level of technical savvy.

For a list of hosts that claim PostgreSQL experience and support, check out PostgreSQL Hosting Providers. We’ll be covering hosts that we have heard positive reviews about from PostgreSQL users, or that we have direct experience with.

  • Dedicated Server. This is the oldest and most common kind of hosting offered suitable for PostgreSQL. It is the most responsive, but also takes the most time to set up. It is being quickly replaced by cheaper options. We won’t provide any examples of these since there are too many good ones to itemize. It tends to be the most expensive, but it provides you with the greatest control for disks you can use, as well as disk configuration. For low profile servers, the dedicated server is almost always more expensive. For high-end servers getting into the 8 CPU/terabyte disks, dedicated is on par or cheaper than Cloud and VPS. This is designed more for experienced Sys Admins and Db Admins with a tremendous need for power.

  • Virtual Private Server (VPS)/Virtual Dedicated Server is like a physical server in that you can treat it like any other, but it is not a physical device—instead, it’s a host on a host server. It is much like a cloud server except you usually can’t save images of it or build them yourself. The ISP builds it and charges you a fixed monthly fee based on configuration of the virtual. You are, however, usually allowed to install any additional things you want via remoting in or a control panel of options. There are more VPS providers than there are of cloud server providers, but this may change in the future.

  • Cloud Server. A cloud server is like a VPS; in fact, in many cases, they use the same underlying technology. The main difference between cloud and standard virtual is you have more control and the billing is hour metered. As you would with a virtual dedicated server, you can install anything you want on it, manage permissions, remote into it, and sometimes add more disks or disk space. They also often come packaged with cloud storage. Where it differs from dedicated server or the conventional VPS is that you can usually save images of it and restore these images using a web console. You can delete servers, add new servers, scale up servers. Therefore, they are ideal if you are not sure how much power you will need, or even what OS you want to deploy on, or if your needs fluctuate frequently on a daily basis. They vary in offerings from cloud host to cloud host. so you’ll want to closely analyze the fine print. As far as pricing goes for an always on server with similar configuration, they are about the same price or slightly more expensive than VPS/Virtual Dedicated one.

  • DbaaS is an upcoming type called Database as a Service (DbaaS).

Virtual Private Server (VPS)/Virtual Dedicated Server

You can get a Virtual for as little as $5 USD per month, but if you have higher bandwidth needs and want to do something serious with PostgreSQL (something more than hosting your blog or consulting website), we recommend spending at least $50 USD per month. These do charge you extra for bandwidth above what is packaged with the plan, so you’ll want to consider the cost of that depending on traffic you have.

  • Hub.org has been providing PostgreSQL and open source specific hosting services for longer than any we can think of and was founded by a PostgreSQL core team member. They offer FreeBSD VPS servers with the latest versions of PostgreSQL installed. The DBMS is dedicated for higher end plans and shared for lower plans. They also offer PostGIS hosting in the plan. Their VPS hosting starts at $5.00 USD/month, with higher ends being $60 USD per month. The disk space availability is pretty low (around 20 GB for their highest plan), so probably not suitable for large PostgreSQL databases, but fine for those with low traffic or databases under 15 GB or so.

  • A2Hosting offers Virtual Private Server hosting with quick installers for PostgreSQL 9.0. They also offer 24/7 support. Their VPS plans range from approximately $10 to $60 with quick installers. They offer various Linux options (CentOS, Fedora, Slackware, and Ubuntu). It also offers shared hosting with PostgreSQL 9.0.

  • GoDaddy Virtual Dedicated - Although GoDaddy doesn’t offer PostgreSQL and are more well known for their shared hosting SQL Server and MySQL, they are the biggest host and offer fairly cheap Virtual Dedicated hosting packages. They also offer Windows 2008+ virtual dedicated servers, in addition to CentOS and Fedora offerings—a better option for people who want to run a DBMS+ASP.NET on the same Windows box. The disk sizes are on the low end, approximately 20 GB to 120 GB. You should probably go with at least the 2 GB RAM plan, which is priced around $40 USD per month. We must say their tech support isn’t that great, but it isn’t horrible either, and is available 24/7.

Cloud Server Hosters

Pricing usually starts around $0.02 USD per 1 GB of RAM per hour, depending on if you go with a contract or a pay-as-you go plan; keep in mind that Windows servers tend to be more pricey than the Linux/Unix Cloud server offerings. Each has their own specialty perks, so it’s hard to say one is absolutely better than another. You’ll probably want to go with at least a 2 GB motherboard RAM plan if you plan to do anything remotely serious with PostgreSQL.

As a general rule, cloud disk speeds tend to be slower than the physical disks and not optimized for databases with Amazon EC having one of the worst reputations. This may change in the future, but that’s where the technology is right now. A lot of people use cloud servers despite concerns with speed and robustness because of the sheer convenience of being able to create an image to your liking and cloning it many times.

Lots of cloud server offerings are cropping up these days. They are generally fairly priced, easy to use with wizards, and more importantly you can have a server up an running in less than 30 minutes. Many come with OS images that come pre-installed with PostgreSQL. We generally prefer installing our own using the aforementioned Yum repository, or Ubuntu apt-get, or EnterpriseDb installers, but if you want to get up and running with PostgreSQL with additional add-ons such as GIS add-ons, a pre-made image might better suit your needs.

Below are a couple of cloud hosts we’ve heard general good things about from PostgreSQL users or have personal experience with. As they say: your mileage may vary.

  • Linode is a Linux-only XEN VPS host with a fairly good reputation among PostgreSQL users. Plans offered accomodate for various flavors of Linux, including OpenSUSE, as well as automated backup options at fairly cheap prices. Linode also have various plan tiers, starting at $20 per month for 20 GB storage, going up to $160 per month for 160 GB storage and 4 GB motherboard RAM. The host is a bit of a hybrid Cloud/VPS, in that it offers similar features of standard cloud hosting, like deploying your own server with a panel, saving images but using VPS technology. Unlike standard cloud hosts, Linode doesn’t charge by the hour but instead, by the month, based on whatever plan you purchased.

  • GoGrid is not specifically designed for PostgreSQL, but generally performs well. These plans offer dedicated servers on the same network as your cloud servers so connectivity speeds are fast between the two. From our personal experience, GoGrid’s 24/7 tech support is superb. If you are not sure cloud server will be fast enough for your needs, GoGrid’s hybrid approach might be just what you are looking for. It offers Linux and Windows standard images at the same price, as well as some community contributed ones; you can also make your own. It is also generous with ips starting with 8 ips per account, which you can assign to the same server if you choose, allowing you to add more for a small additional cost. This is important if you plan to host several different domains each requiring their own SSL certificate on the same server. They, however, start at a higher tier than the others with their entry-level Professional Cloud, starting at $200 per month, which gets you a 4 GB/4core server with 200 GB disk and 100 GB of cloud storage. For Windows hosting, GoGrid is comparable to Amazon’s prices. Many of its options are geared toward enterprises requiring virtual private clouds.

  • Amazon EC (AWS) is probably the most popular choice in general for cloud servers. It is relatively cheap and you can turn off an instance if you don’t need it and not get charged for the downtime. For databases, it generally has a bad reputation, though that reputation is improving. (Here’s an interesting read on Amazon by Christophe Pettus (PostgreSQL on Amazon) that has tips and tricks of getting the most out of AWS.) If you don’t need to do super heavy lifting and don’t have terabytes of data to swing around, it’s not a bad choice. They also allow you to add new EC disks on demand for any size you want so easy to scale, disk-wise. Granted, their disks are kinda slow.

    Amazon provides images for both Windows and various Linux/Free BSD distros, so there are likely more choices available than any other cloud server offering. Amazon also allows you to save the full snapshot image of a server, regardless its size, whereas other cloud offerings have limits on the maximum size you can save. However, they do not offer 24/7 tech support like many of the others.

    Many Amazon EC community images come pre-installed with PostgreSQL, and they come and go. It is best to run a search in the image list, or use one specially made for what you are doing.

    Generally speaking, Amazon is more hands-off than the others, so most issues are opened and closed with a form. You rarely get personalized emails. This is not to say the service is poor, since most issues involve systemwide issues that it promptly addresses. If you feel uncomftable with this arrangement or are a non-techie with lots of basic OS hand-holding needs, Amazon is probably not the best host for you.

  • RackSpace is not specifically designed for PostgreSQL, but we know several PostgreSQL users using it for PostgreSQL and web application, and are happy with the performance and Rackspace support team. It offers both Linux and Windows.

  • SoftLayer is not specifically designed for PostgreSQL but similar to GoGrid, it provides both dedicated as well as cloud hosting offerings and Private network setups. It provides hosting for both Linux and Windows. Pricing is similar to the others with hourly and monthly options.

PostgreSQL Database as a Service

Fairly recently, there have been database cloud offerings that focus on giving you optimized PostgreSQL installs. We’ll refer to these as database-as-a-service (DbaaS). These tend to be pricier than cloud server offerings, but in return are optimized for more database heavy load and often take care of the System DBA tasks for you.

In theory, they don’t suffer the same disk speed issues many have complained about with Server cloud offerings like Amazon EC.

These are similar to Amazon RDS (Amazon’s MySQL database service offering), SQL Server Azure (Microsoft’s SQL Server in the cloud), and even Oracle’s Public Cloud.

There are a few downsides: you are usually stuck with one version of PostgreSQL, which is usually a version behind the latest, and you may not be able to install all the extensions you want to. In other words, many of these don’t support PostGIS, which we personally can’t live without. Their starting costs tend to be pricier than server cloud offerings, but promise you better speed and optimized for Postgres.

  • Heroku Postgres. Heroku offers a lot of application appliances in the cloud. One of these is Heroku Postgres. which gives you up to 2 TB database storage and various pricing offerings for number of cores and hot memory (equivalent to motherboard ram). The main downside we see with Heroku is that many modules are disabled, and a user is stuck with whatever version of PostgreSQL Heroku supports (which is currently one version behind latest). For example, you can’t run PostGIS or any untrusted languages like plpythonu on this. This may change in the future. For more of a critique, read: Heroku a really easy way to get a database in a hurry.

  • EnterpriseDb Cloud Database. This is a PostgreSQL and PostgreSQL Plus advanced servers cloud database hosting on Amazon EC2. It just came out of beta at the time of this writing. It comes ready with elastic scale out and auto provisioning, along with the self-healing tool kits built by EnterpriseDb. In addition, you have the option to manage it yourself or have EnterpriseDb do the managing. This one does use the latest version of PostgreSQL (9.1) and does allow for installation of PostGIS, unlike the others mentioned.

  • CartoDB PostGIS in the Cloud is a PostgreSQL offering targeted at providing an easy interface for performing spatial queries and maps with PostGIS. It has an intro free offering that comes with canned data and CartoDb pricing tiers based on database size that allow you to load up your own spatial data in various formats. It also provides slick map interfaces for displaying spatial queries. This is the first DaaS to provide PostGIS 2.0.

  • VMWare vFabric Postgres is not a hosted service, but instead an engine to make a DbaaS; it’s more suited for Enterprises or ISPs looking to replicate a stampede of PostgreSQL elephants.

PostgreSQL Packaged Command-Line Tools

In this section, we list help commands of command line tools discussed in this book.

Database Backup: pg_dump

pg_dump is the command-line executable packaged with PostgreSQL for doing individual database and selective parts of a database. It can backup to tar, custom compressed backup, and plain text. Plain-text backups need to be restored with psql. If you choose --inserts or --column-inserts option, it will backup using standard SQL inserts that can be run with a tool like pgAdmin. For examples of pg_dump usage, refer to Selective Backup Using pg_dump.

Example A-1. pg_dump help

pg_dump --help
pg_dump dumps a database as a text file or to other formats.
Usage:
pg_dump [OPTION]... [DBNAME]

General options:
-f, --file=FILENAME         output file or directory name
-F, --format=c|d|t|p        output file format (custom, directory, tar, plain
text)
-v, --verbose               verbose mode
-Z, --compress=0-9          compression level for compressed formats
--lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock
--help                      show this help, then exit
--version                   output version information, then exit
Options controlling the output content:
-a, --data-only             dump only the data, not the schema
-b, --blobs                 include large objects in dump
-c, --clean                 clean (drop) database objects before recreating
-C, --create                include commands to create database in dump
-E, --encoding=ENCODING     dump the data in encoding ENCODING
-n, --schema=SCHEMA         dump the named schema(s) only
-N, --exclude-schema=SCHEMA do NOT dump the named schema(s)
-o, --oids                  include OIDs in dump
-O, --no-owner              skip restoration of object ownership in
plain-text format
-s, --schema-only           dump only the schema, no data
-S, --superuser=NAME        superuser user name to use in plain-text format
-t, --table=TABLE           dump the named table(s) only
-T, --exclude-table=TABLE   do NOT dump the named table(s)
-x, --no-privileges         do not dump privileges (grant/revoke)
--binary-upgrade            for use by upgrade utilities only
--column-inserts            dump data as INSERT commands with column names
--disable-dollar-quoting    disable dollar quoting, use SQL standard quoting
--disable-triggers          disable triggers during data-only restore
--exclude-table-data=TABLE  do NOT dump data for the named table(s) 1
--inserts                   dump data as INSERT commands, rather than COPY
--no-security-labels        do not dump security label assignments
--no-tablespaces            do not dump tablespace assignments
--no-unlogged-table-data    do not dump unlogged table data
--quote-all-identifiers     quote all identifiers, even if not key words
--section=SECTION           dump named section (pre-data, data, or post-data) 2
--serializable-deferrable   wait until the dump can run without anomalies
--use-set-session-authorization
use SET SESSION AUTHORIZATION commands instead of
ALTER OWNER commands to set ownership
Connection options:
-h, --host=HOSTNAME      database server host or socket directory
-p, --port=PORT          database server port number
-U, --username=NAME      connect as specified database user
-w, --no-password        never prompt for password
-W, --password           force password prompt (should happen automatically)
--role=ROLENAME          do SET ROLE before dump
1 2

New features introduced in PostgreSQL 9.2.

Server Backup: pg_dumpall

pg_dump_all is used for doing complete plain text server cluster backup as well as server level objects like roles and table spaces. This feature is discussed in Systemwide Backup Using pg_dumpall.

Example A-2. pg_dumpall help

pg_dumpall --help
pg_dumpall extracts a PostgreSQL database cluster into an SQL script file.
Usage:
pg_dumpall [OPTION]...

General options:
-f, --file=FILENAME         output file name
--lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock
--help                      show this help, then exit
--version                   output version information, then exit

Options controlling the output content:
  -a, --data-only             dump only the data, not the schema
  -c, --clean                 clean (drop) databases before recreating
  -g, --globals-only          dump only global objects, no databases
  -o, --oids                  include OIDs in dump
  -O, --no-owner              skip restoration of object ownership
  -r, --roles-only            dump only roles, no databases or tablespaces
  -s, --schema-only           dump only the schema, no data
  -S, --superuser=NAME        superuser user name to use in the dump
  -t, --tablespaces-only      dump only tablespaces, no databases or roles
  -x, --no-privileges         do not dump privileges (grant/revoke)
  --binary-upgrade            for use by upgrade utilities only
  --column-inserts            dump data as INSERT commands with column names
  --disable-dollar-quoting    disable dollar quoting, use SQL standard quoting
  --disable-triggers          disable triggers during data-only restore
  --inserts                   dump data as INSERT commands, rather than COPY
  --no-security-labels        do not dump security label assignments
  --no-tablespaces            do not dump tablespace assignments
  --no-unlogged-table-data    do not dump unlogged table data
  --quote-all-identifiers     quote all identifiers, even if not key words
  --use-set-session-authorization
use SET SESSION AUTHORIZATION commands instead o
ALTER OWNER commands to set ownership

Connection options:
  -h, --host=HOSTNAME      database server host or socket directory
  -l, --database=DBNAME    alternative default database
  -p, --port=PORT          database server port number
  -U, --username=NAME      connect as specified database user
  -w, --no-password        never prompt for password
  -W, --password           force password prompt (should happen automatically)
  --role=ROLENAME          do SET ROLE before dump

If -f/--file is not used, then the SQL script will be written to the standard
output.

Database Backup: pg_restore

pg_restore is the command-line tool packaged with PostgreSQL for doing database restores of compressed, tar, and directory backups created by pg_dump. Examples of its use are available in Restore.

Example A-3. pg_restore help

pg_restore --help
pg_restore restores a PostgreSQL database from an archive created by pg_dump.
Usage:
pg_restore [OPTION]... [FILE]
General options:
	-d, --dbname=NAME        connect to database name
	-f, --file=FILENAME      output file name
	-F, --format=c|d|t       backup file format (should be automatic)
	-l, --list               print summarized TOC of the archive
	-v, --verbose            verbose mode
	--help                   show this help, then exit
	--version                output version information, then exit

Options controlling the restore:
	-a, --data-only          restore only the data, no schema
	-c, --clean              clean (drop) database objects before recreating
	-C, --create             create the target database
	-e, --exit-on-error      exit on error, default is to continue
	-I, --index=NAME         restore named index
	-j, --jobs=NUM           use this many parallel jobs to restore
	-L, --use-list=FILENAME  use table of contents from this file for
	selecting/ordering output
	-n, --schema=NAME        restore only objects in this schema
	-O, --no-owner           skip restoration of object ownership
	-P, --function=NAME(args)
	restore named function
	-s, --schema-only        restore only the schema, no data
	-S, --superuser=NAME     superuser user name to use for disabling triggers
	-t, --table=NAME         restore named table
	-T, --trigger=NAME       restore named trigger
	-x, --no-privileges      skip restoration of access privileges (grant/revoke)
	-1, --single-transaction
	restore as a single transaction
	--disable-triggers       disable triggers during data-only restore
	--no-data-for-failed-tables
	do not restore data of tables that could not be
	created
	--no-security-labels     do not restore security labels
	--no-tablespaces         do not restore tablespace assignments
    --section=SECTION        restore named section (pre-data, data, or post-data) 1
	--use-set-session-authorization
use SET SESSION AUTHORIZATION commands instead of
ALTER OWNER commands to set ownership
Connection options:
	-h, --host=HOSTNAME      database server host or socket directory
	-p, --port=PORT          database server port number
	-U, --username=NAME      connect as specified database user
	-w, --no-password        never prompt for password
	-W, --password           force password prompt (should happen automatically)
	--role=ROLENAME          do SET ROLE before restore
1

These items are new features introduced in PostgreSQL 9.2.

psql: Interactive and Scriptable

psql is a tool for doing interactive querying as well as running command-line scripted tasks. In this section, we’ll list both the command line and interactive commands of psql.

psql Interactive Commands

This section lists commands available in psql when you launch an interactive session. For examples of usage, refer to Interactive psql and Non-Interactive psql.

Example A-4. Getting list of interactive help commands

psql
?
General
  copyright             show PostgreSQL usage and distribution terms
  g [FILE] or ;         execute query (and send results to file or |pipe)
  h [NAME]              help on syntax of SQL commands, * for all commands
  q                     quit psql
Query Buffer
  e [FILE] [LINE]       edit the query buffer (or file) with external editor
  ef [FUNCNAME [LINE]]  edit function definition with external editor
  p                     show the contents of the query buffer
  
                     reset (clear) the query buffer
  w FILE                write query buffer to file
Input/Output
  copy ...              perform SQL COPY with data stream to the client host
  echo [STRING]         write string to standard output
  i FILE                execute commands from file
 ir FILE               as i, but relative to location of current script 1
  o [FILE]              send all query results to file or |pipe
  qecho [STRING]        write string to query output stream (see o)
Informational
  (options: S = show system objects, + = additional detail)
  d[S+]                 list tables, views, and sequences
  d[S+]  NAME           describe table, view, sequence, or index
  da[S]  [PATTERN]      list aggregates
  db[+]  [PATTERN]      list tablespaces
  dc[S]  [PATTERN]      list conversions
  dC     [PATTERN]      list casts
  dd[S]  [PATTERN]      show comments on objects
  ddp    [PATTERN]      list default privileges
  dD[S]  [PATTERN]      list domains
  det[+] [PATTERN]      list foreign tables
  des[+] [PATTERN]      list foreign servers
  deu[+] [PATTERN]      list user mappings
  dew[+] [PATTERN]      list foreign-data wrappers
  df[antw][S+] [PATRN]  list [only agg/normal/trigger/window] functions
  dF[+]  [PATTERN]      list text search configurations
  dFd[+] [PATTERN]      list text search dictionaries
  dFp[+] [PATTERN]      list text search parsers
  dFt[+] [PATTERN]      list text search templates
  dg[+]  [PATTERN]      list roles
  di[S+] [PATTERN]      list indexes
  dl                    list large objects, same as lo_list
  dL[S+] [PATTERN]      list procedural languages
  dn[S+] [PATTERN]      list schemas
  do[S]  [PATTERN]      list operators
  dO[S+] [PATTERN]      list collations
  dp     [PATTERN]      list table, view, and sequence access privileges
  drds [PATRN1 [PATRN2]] list per-database role settings
  ds[S+] [PATTERN]      list sequences
  dt[S+] [PATTERN]      list tables
  dT[S+] [PATTERN]      list data types
  du[+]  [PATTERN]      list roles
  dv[S+] [PATTERN]      list views
  dE[S+] [PATTERN]      list foreign tables
  dx[+]  [PATTERN]      list extensions
  l[+]                  list all databases
  sf[+] FUNCNAME        show a function's definition
  z      [PATTERN]      same as dp
Formatting
  a                     toggle between unaligned and aligned output mode
  C [STRING]            set table title, or unset if none
  f [STRING]            show or set field separator for unaligned query output
  H                     toggle HTML output mode (currently off)
  pset NAME [VALUE]     set table output option
                         (NAME := {format|border|expanded|fieldsep|fieldsep_zero 2| footer|null|
                 numericlocale|recordsep|tuples_only|title|tableattr|pager})
  	 [on|off]            show only rows (currently off)
  T [STRING]            set HTML <table> tag attributes, or unset if none
  x [on|off]            toggle expanded output (currently off)
Connection
  c[onnect] [DBNAME|- USER|- HOST|- PORT|-]
                         connect to new database (currently "postgres")
  encoding [ENCODING]   show or set client encoding
  password [USERNAME]   securely change the password for a user
  conninfo              display information about current connection
Operating System
  cd [DIR]              change the current working directory
setenv NAME [VALUE]   set or unset environment variable 3
  	iming [on|off]       toggle timing of commands (currently off)
  ! [COMMAND]           execute command in shell or start interactive shell
1 2 3

These items are new features introduced in PostgreSQL 9.2.

psql Non-Interactive Commands

Example A-5 shows the non-interactive command helps screen. Examples of its usage are covered in Non-Interactive psql.

Example A-5. psql Basic Help screen

psql --help
psql is the PostgreSQL interactive terminal.
Usage:
psql [OPTION]... [DBNAME [USERNAME]]

General options:
-c, --command=COMMAND    run only single command (SQL or internal) and exit
-d, --dbname=DBNAME      database name to connect to
-f, --file=FILENAME      execute commands from file, then exit
-l, --list               list available databases, then exit
-v, --set=, --variable=NAME=VALUE
set psql variable NAME to VALUE
-X, --no-psqlrc          do not read startup file (~/.psqlrc)
-1 ("one"), --single-transaction
execute command file as a single transaction
--help                   show this help, then exit
--version                output version information, then exit

Input and output options:
-a, --echo-all           echo all input from script
-e, --echo-queries       echo commands sent to server
-E, --echo-hidden        display queries that internal commands generate
-L, --log-file=FILENAME  send session log to file
-n, --no-readline        disable enhanced command line editing (readline)
-o, --output=FILENAME    send query results to file (or |pipe)
-q, --quiet              run quietly (no messages, only query output)
-s, --single-step        single-step mode (confirm each query)
-S, --single-line        single-line mode (end of line terminates SQL command)


Output format options:
-A, --no-align           unaligned table output mode
-F, --field-separator=STRING
set field separator (default: "|")
-H, --html               HTML table output mode
-P, --pset=VAR[=ARG]     set printing option VAR to ARG (see pset command)
-R, --record-separator=STRING
set record separator (default: newline)
-t, --tuples-only        print rows only
-T, --table-attr=TEXT    set HTML table tag attributes (e.g., width, border)
-x, --expanded           turn on expanded table output
-z, --field-separator-zero 1
                           set field separator to zero byte
-0, --record-separator-zero  2
                           set record separator to zero byte

Connection options:
-h, --host=HOSTNAME      database server host or socket directory
-p, --port=PORT          database server port (default: "5432")
-U, --username=USERNAME  database user name
-w, --no-password        never prompt for password
-W, --password           force password prompt (should happen automatically)

For more information, type "?" (for internal commands) or "help" (for SQL
commands) from within psql, or consult the psql section in the PostgreSQL
documentation.
1 2

These items are new features introduced in PostgreSQL 9.2.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.226.52.203