A handy cheat-sheet for the PostgreSQL database, for when I'm too lazy to dig through the docs or find another cheat-sheet.
Start and stop server
sudo su postgres -c '/opt/local/lib/postgresql/bin/postgres -D /opt/local/var/db/postgres/defaultdb' cnt-z bg
or
su -c 'pg_ctl start -D /opt/local/var/db/postgres/defaultdb -l postgreslog' postgres
To shutdown
sudo su postgres -c 'pg_ctl stop -D /opt/local/var/db/postgres/defaultdb'
Run client
psql -U postgres
sudo -u postgres psql
Commands
Postgres commands start with a backslash '\' character. Type \l to list databases and \c to connect to a database. \? shows help and \q quits. \d lists tables, views and sequences, \dt lists tables.
Granting access privileges
create database dbname; create user joe_mamma with password 'password'; grant all privileges on database dbname to joe_mamma; grant all privileges on all tables in schema public to joe_mamma; grant all privileges on all sequences in schema public to joe_mamma;
See the docs for GRANT.
SQL dump and restore
pg_dump -U postgres dbname | gzip > dbname.dump.2011.10.24.gz
gunzip < dbname.dump.2011.10.24.gz | sudo -u postgres psql --dbname dbname
For more, see Backup and Restore from the Postgres manual.
Truncate
Delete all data from a table and related tables.
truncate my_table CASCADE;
Sequences
Sequences can be manipulated with currval and setval.
select currval('my_table_id_seq'); select setval('my_table_id_seq',1,false);
Trouble-shooting
If you seen an Ident authentication error...
FATAL: Ident authentication failed for user "postgres"
... look in your pg_hba.conf file. Ask Postgres where this file is by typing, "show hba_file;".
sudo cat /etc/postgresql/9.0/main/pg_hba.conf
You might see a line that looks like this:
local all all ident
What the 'ident' means is postgres uses your shell account name to log you in. Specifying the user on the command line "psql -U postgres" doesn't help. Either change "ident" in the pg_hba.conf to "md5" or "trust" and restart postgres, or just do what it wants: "sudo -u postgres psql". More on this can be found in “FATAL: Ident authentication failed”, or how cool ideas get bad usage schemas.