15 Advanced PostgreSQL Commands

Download as pdf or txt
Download as pdf or txt
You are on page 1of 11

15 Advanced PostgreSQL Commands with Examples http://www.thegeekstuff.com/2009/05/15-advanced-postgresql-command...

Home
About
Free eBook
Archives
Best of the Blog
Contact
Subscribe
HowTo & FAQ

Ads by Google Postgres Database Administration Linux Commands SQL Server Database

15 Advanced PostgreSQL Commands with


Examples
by SathiyaMoorthy on May 21, 2009 ShareThis

Some of the open source application comes with postgreSQL


database. To maintain those application, companies may not hire
a fulltime postgreSQL DBA. Instead they may request the existing
Oracle DBA, or Linux system administrator, or programmers to
maintain the potgreSQL. In this article let discuss about the 15
practical postgresql database commands which will be useful to both DBA and expert psql users.

Also, refer to our previous article about 15 Practical PostgreSQL DBA Commands.

1. How to find the largest table in the postgreSQL database?


$ /usr/local/pgsql/bin/psql test
Welcome to psql 8.3.7, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms


\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

test=# SELECT relname, relpages FROM pg_class ORDER BY relpages DESC;

1 of 11 7/7/2010 8:17 AM
15 Advanced PostgreSQL Commands with Examples http://www.thegeekstuff.com/2009/05/15-advanced-postgresql-command...

relname | relpages
-----------------------------------+----------
pg_proc | 50
pg_proc_proname_args_nsp_index | 40
pg_depend | 37
pg_attribute | 30

If you want only the first biggest table in the postgres database then append the above query with limit as:
# SELECT relname, relpages FROM pg_class ORDER BY relpages DESC limit 1;
relname | relpages
---------+----------
pg_proc | 50
(1 row)

relname – name of the relation/table.


relpages - relation pages ( number of pages, by default a page is 8kb )
pg_class – system table, which maintains the details of relations
limit 1 – limits the output to display only one row.

2. How to calculate postgreSQL database size in disk ?


pg_database_size is the function which gives the size of mentioned database. It shows the size in bytes.
# SELECT pg_database_size('geekdb');
pg_database_size
------------------
63287944
(1 row)

If you want it to be shown pretty, then use pg_size_pretty function which converts the size in bytes to human
understandable format.
# SELECT pg_size_pretty(pg_database_size('geekdb'));
pg_size_pretty
----------------
60 MB
(1 row)

3. How to calculate postgreSQL table size in disk ?

This is the total disk space size used by the mentioned table including index and toasted data. You may be
interested in knowing only the size of the table excluding the index then use the following command.
# SELECT pg_size_pretty(pg_total_relation_size('big_table'));
pg_size_pretty
----------------
55 MB
(1 row)

How to find size of the postgreSQL table ( not including index ) ?

Use pg_relation_size instead of pg_total_relation_size as shown below.

2 of 11 7/7/2010 8:17 AM
15 Advanced PostgreSQL Commands with Examples http://www.thegeekstuff.com/2009/05/15-advanced-postgresql-command...

# SELECT pg_size_pretty(pg_relation_size('big_table'));
pg_size_pretty
----------------
38 MB
(1 row)

4. How to view the indexes of an existing postgreSQL table ?


Syntax: # \d table_name

As shown in the example below, at the end of the output you will have a section titled as indexes, if you have
index in that table. In the example below, table pg_attribute has two btree indexes. By default postgres uses
btree index as it good for most common situations.
test=# \d pg_attribute
Table "pg_catalog.pg_attribute"
Column | Type | Modifiers
---------------+----------+-----------
attrelid | oid | not null
attname | name | not null
atttypid | oid | not null
attstattarget | integer | not null
attlen | smallint | not null
attnum | smallint | not null
attndims | integer | not null
attcacheoff | integer | not null
atttypmod | integer | not null
attbyval | boolean | not null
attstorage | "char" | not null
attalign | "char" | not null
attnotnull | boolean | not null
atthasdef | boolean | not null
attisdropped | boolean | not null
attislocal | boolean | not null
attinhcount | integer | not null
Indexes:
"pg_attribute_relid_attnam_index" UNIQUE, btree (attrelid, attname)
"pg_attribute_relid_attnum_index" UNIQUE, btree (attrelid, attnum)

5. How to specify postgreSQL index type while creating a new index on a table ?
By default the indexes are created as btree. You can also specify the type of index during the create index
statement as shown below.

3 of 11 7/7/2010 8:17 AM
15 Advanced PostgreSQL Commands with Examples http://www.thegeekstuff.com/2009/05/15-advanced-postgresql-command...

Syntax: CREATE INDEX name ON table USING index_type (column);

# CREATE INDEX test_index ON numbers using hash (num);

6. How to work with postgreSQL transactions ?

How to start a transaction ?

# BEGIN -- start the transaction.

How to rollback or commit a postgreSQL transaction ?

All the operations performed after the BEGIN command will be committed to the postgreSQL database only you
execute the commit command. Use rollback command to undo all the transactions before it is committed.
# ROLLBACK -- rollbacks the transaction.
# COMMIT -- commits the transaction.

7. How to view execution plan used by the postgreSQL for a SQL query ?
# EXPLAIN query;

8. How to display the plan by executing the query on the server side ?

This executes the query in the server side, thus does not shows the output to the user. But shows the plan in
which it got executed.
# EXPLAIN ANALYZE query;

9. How to generate a series of numbers and insert it into a table ?


This inserts 1,2,3 to 1000 as thousand rows in the table numbers.
# INSERT INTO numbers (num) VALUES ( generate_series(1,1000));

10. How to count total number of rows in a postgreSQL table ?


This shows the total number of rows in the table.
# select count(*) from table;

Following example gives the total number of rows with a specific column value is not null.
# select count(col_name) from table;

Following example displays the distinct number of rows for the specified column value.
# select count(distinct col_name) from table;

11. How can I get the second maximum value of a column in the table ?

First maximum value of a column

4 of 11 7/7/2010 8:17 AM
15 Advanced PostgreSQL Commands with Examples http://www.thegeekstuff.com/2009/05/15-advanced-postgresql-command...

# select max(col_name) from table;

Second maximum value of a column

# SELECT MAX(num) from number_table where num < ( select MAX(num) from number_table );

12. How can I get the second minimum value of a column in the table ?

First minimum value of a column

# select min(col_name) from table;

Second minimum value of a column

# SELECT MIN(num) from number_table where num > ( select MIN(num) from number_table );

13. How to view the basic available datatypes in postgreSQL ?


Below is the partial output that displays available basic datatypes and it’s size.
test=# SELECT typname,typlen from pg_type where typtype='b';
typname | typlen
----------------+--------
bool | 1
bytea | -1
char | 1
name | 64
int8 | 8
int2 | 2
int2vector | -1

typname – name of the datatype


typlen – length of the datatype

14. How to redirect the output of postgreSQL query to a file?


# \o output_file
# SELECT * FROM pg_class;

The output of the query will be redirected to the “output_file”. After the redirection is enabled, the select
command will not display the output in the stdout. To enable the output to the stdout again, execute the \o
without any argument as mentioned below.
# \o

As explained in our earlier article, you can also backup and restore postgreSQL database using pg_dump and
psql.

15. Storing the password after encryption.

PostgreSQL database can encrypt the data using the crypt command as shown below. This can be used to store
your custom application username and password in a custom table.
# SELECT crypt ( 'sathiya', gen_salt('md5') );

5 of 11 7/7/2010 8:17 AM
15 Advanced PostgreSQL Commands with Examples http://www.thegeekstuff.com/2009/05/15-advanced-postgresql-command...

PostgreSQL crypt function Issue:

The postgreSQL crypt command may not work on your environment and display the following error message.
ERROR: function gen_salt("unknown") does not exist
HINT: No function matches the given name and argument types.
You may need to add explicit type casts.

PostgreSQL crypt function Solution:

To solve this problem, installl the postgresql-contrib-your-version package and execute the following command
in the postgreSQL prompt.
# \i /usr/share/postgresql/8.1/contrib/pgcrypto.sql

Bookmark/Share this Article


Leave a Comment

Download Free eBook - Linux 101 Hacks

Get free Unix tutorials, tips and tricks straight to your email in-box.
you@address.com Subscribe

Print Friendly
RSS Feed

If you enjoyed this article, you might also like..

1. 15 Practical PostgreSQL Database Administration


Commands
2. How To Backup and Restore PostgreSQL Database
Using pg_dump and psql
3. How to Execute PostgreSQL Commands Inside Unix
Shell Scripts
4. Get Quick Info On MySQL DB, Table, Column and
Index Using mysqlshow
5. 9 Steps to Install and Configure PostgreSQL from
Source on Linux

Tags: pg_database_size Function, pg_size_pretty function, postgreSQL Btree Index, PostgreSQL database,
postgreSQL Database Encryption, PostgreSQL DBA Commands, postgreSQL Hash Index, postgreSQL
Performance Tuning, PostgreSQL psql command

6 of 11 7/7/2010 8:17 AM
15 Advanced PostgreSQL Commands with Examples http://www.thegeekstuff.com/2009/05/15-advanced-postgresql-command...

{ 3 trackbacks }

15 Advanced PostgreSQL Commands with Examples - DbRunas


May 21, 2009 at 12:29 pm
アイビースター | PostgreSQLのちょっとしたSQLの15の方法
May 26, 2009 at 7:00 pm
Daddy, I found it!, 15 Awesome Linux Find Command Examples (Part2)
June 29, 2009 at 5:50 pm

{ 5 comments… read them below or add one }

1 adam May 23, 2009 at 6:15 am

Your article looks great.

In 13th command – How to view the basic available datatypes in postgreSQL ?

SELECT typname,typlen from pg_type where typtype=’b’;

what is meant by typtype=’b’ ? what does it refer?

2 Harsh Agrawal May 24, 2009 at 2:36 pm

Thanks man.. This is very useful for me

3 Srini May 31, 2009 at 4:52 pm

Adam,

typtype=’b’ means that data is a basetype. b==basetype.

PostgreSQL data types are divided into base types, composite types, domains, and pseudo-types.

http://developer.postgresql.org/pgdocs/postgres/extend-type-system.html

4 Chris August 27, 2009 at 12:14 pm

Great article. The commands to find overall table/database size were extremely useful.

5 Andrew J. Lazarus December 15, 2009 at 12:32 pm

For getting the second-minimum of a table, if you are not concerned with tie values, it’s much faster to use
SELECT m FROM mytable ORDER BY m LIMIT 1 OFFSET 1;
if m is indexed

Leave a Comment

7 of 11 7/7/2010 8:17 AM
15 Advanced PostgreSQL Commands with Examples http://www.thegeekstuff.com/2009/05/15-advanced-postgresql-command...

Name

E-mail

Website

Notify me of followup comments via e-mail

Previous post: Oracle LSNRCTL – Listener Shutdown and Startup Procedures

Next post: Turbocharge Firefox Browser With Vim Editor Functionality Using Vimperator Add-on

Search

Sign up for our free email newsletter you@address.com Sign Up

Follow us on Twitter

Become a fan at Facebook

Subscribe via RSS

VIM 101 HACKS EBOOK

8 of 11 7/7/2010 8:17 AM
15 Advanced PostgreSQL Commands with Examples http://www.thegeekstuff.com/2009/05/15-advanced-postgresql-command...

"Vim offers just about everything you could ever want from an editor. The
best that can happen is when an experienced user shows you the way and
accompanies you as you learn. This book does exactly this. "

Prof. Dr. Fritz Mehner (Author of several Vim plugins)

Download eBook

POPULAR POSTS
Get a Grip on the Grep! - 15 Practical Grep Command Examples
Linux 101 Hacks - Download Free eBook
6 Steps to Secure Your Home Wireless Network
Backup and Restore MySQL Database Using mysqldump
Linux Crontab: 15 Awesome Cron Job Examples
Turbocharge PuTTY with 12 Powerful Add-Ons - Software for Geeks #3
Mommy, I found it! -- 15 Practical Linux Find Command Examples
Unix LS Command: 15 Practical Examples
How To Monitor Remote Windows Machine Using Nagios on Linux
15 Examples To Master Linux Command Line History

CATEGORIES

Vi / Vim Tips and Tricks


UNIX Sed Tips and Tricks
Linux Tutorials
SSH Tips and Tricks
Productivity Tips
HowTo & FAQ
Hardware Articles
Nagios 3.0 Tutorials
MySQL
PostgreSQL
Oracle

12 AMAZING LINUX BOOKS

1. Sed and Awk


2. Learning the Vi and Vim Editors
3. Bash Cookbook
4. SSH, The Secure Shell
5. Essential System Administration

9 of 11 7/7/2010 8:17 AM
15 Advanced PostgreSQL Commands with Examples http://www.thegeekstuff.com/2009/05/15-advanced-postgresql-command...

6. Linux Server Hacks, Volume One


7. DNS and BIND
8. Understanding the Linux Kernel
9. Linux Cookbook
10. Linux Firewalls
11. Linux Administration Handbook
12. Beginning Ubuntu Linux
Read full review of these 12 books

About The Geek Stuff

My name is Ramesh Natarajan. I will be posting instruction guides, how-to,

10 of 11 7/7/2010 8:17 AM
15 Advanced PostgreSQL Commands with Examples http://www.thegeekstuff.com/2009/05/15-advanced-postgresql-command...

troubleshooting tips and tricks on Linux, database, hardware, security and web. My focus is to write
articles that will either teach you or help you resolve a problem. Read more about Ramesh Natarajan and
the blog.

Networking

Follow us on Twitter

Facebook

Contact Us

Contact Me : Use this Contact Form to get in touch me for your comments, questions or suggestions
about this site. You can also simply drop me a line to say hello!.

Mobile Version: Go to m.thegeekstuff.com on your mobile to access this blog from your phone.

Copyright © 2008–2010 Ramesh Natarajan. All rights reserved | Terms of Service


Advertise | Questions or Comments

11 of 11 7/7/2010 8:17 AM

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy