Mostrando postagens com marcador postgres. Mostrar todas as postagens
Mostrando postagens com marcador postgres. Mostrar todas as postagens

11 de março de 2012

Backup Parcial PostgreSQL com "pg_dump"

Em continuidade ao post principal "Soluções de Backup e Restore para PostgreSQL", vamos ver outra opção de backup e restore para PostgreSQL, desta vez utilizando, o "pg_dump" e "pg_restore". Diferente do "pg_dumpall", evidenciado no post "", o "pg_dump" permite realizar o backup apenas dos bancos de dados do cluster.
A principal vantagem do "pg_dump", é permitir a restauração de apenas um banco de dados, ou seja, utilizando o "pg_restore", você escolhe o banco de dados a ser restaurado. Como desvantagem, não faz backup ou permite restore de usuários e schemas do cluster.
Nos exemplos realizados no backup utilizando o "pg_dumpall", utilizaremos um cluster, onde serão utilizados nos exemplos as configurações default:
porta [5432]
usuário [postgres]
host [localhost]
sem tablespace.

Backup Parcial
Sintaxe:
pg_dump -Fc -p <porta> -U <usuario> -h <host> <banco_dados> -f <path/nome_arquivo_backup> 
Onde:
porta: porta do cluster
usuario: usuário com perfil superusuário
host: identificação do servidor
banco_dados: Banco de Dados a ser backupeado
path/nome_arquivo_backup: Caminho e Nome do arquivo de backup

Exemplo (com usuário postgres):
~$ pg_dump -Fc -p 5432 -U postgres -h localhost bdexemplo -f /backup/backup_bdexemplo_postgres-AAMMDDhhmm.sql
Exemplo (com usuário root):
~# su - postgres -c 'pg_dump -Fc -p 5432 -U postgres -h localhost bdexemplo -f /backup/backup_bdexemplo_postgres-AAMMDDhhmm.sql' 

Restore Parcial
Sintaxe:
pg_restore -p <porta> -U <usuario> -h <host> -d <banco_dados_> <path/nome_arquivo_backup>
Exemplo (com usuário postgres):
~$ pg_restore -p 5432 -U postgres -h localhost -d bdexemplo /backup/backup_bdexemplo_postgres-AAMMDDhhmm.sql

Veja também:

Vale lembrar, que os exemplos acima são básicos e facilitam nossos trabalhos no dia a dia, uma vez estes utilitários possuem outros recursos adicionais, a saber.
Help "pg_dump"
~$ 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
  --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
  --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
If no database name is supplied, then the PGDATABASE environment
variable value is used.
Report bugs to <pgsql-bugs@postgresql.org>.

Help "pg_restore"
~$ 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
  --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
If no input file name is supplied, then standard input is used.
Report bugs to <pgsql-bugs@postgresql.org>.


Sem mais, abraço.
Leia mais ...

21 de fevereiro de 2012

Backup Full PostgreSQL com "pg_dumpall"

Este post é parte integrante doutro principal "Soluções de Backup e Restore para PostgreSQL". Vamos ver de forma sucinta e objetiva como realizar o backup (cópia de segurança) full e restore (restauração do backup) full do PostgreSQL, utilizando respectivamente o "pg_dumpall" e o "psql", que consistem em ferramentas que compõe o referido SGDB.
A principal vantagem do "pg_dumpall", é o backup de todo o cluster, incluindo schemas, bancos de dados, tabelas, templates, usuários e roles, assim como suas permissões.
A facilidade do restore, também pode ser considerado uma vantagem, uma vez que segue o mesmo princípio do backup, que também é full. Esta característica, também pode ser uma desvantagem, devido a dificuldade de restore's parciais.
Os procedimentos serão realizados a partir de um cluster, onde serão utilizados nos exemplos as configurações default:
porta [5432]
usuário [postgres]
host [localhost]
sem tablespace.

Backup full
Sintaxe:
pg_dumpall -p <porta> -U <usuario> -h <host> -f <path/nome_arquivo_backup>
Onde:
porta: porta do cluster
usuario: usuário com perfil superusuário
host: identificação do servidor
path/nome_arquivo_backup: Caminho e Nome do arquivo de backup

Exemplo (com usuário postgres):
~$ pg_dumpall -p 5432 -U postgres -h localhost -f /backup/backup_completo_postgres-AAMMDDhhmm.sql
Exemplo (com usuário root):
~# su - postgres -c 'pg_dumpall -p 5432 -U postgres -h localhost -f /backup/backup_completo_postgres-AAMMDDhhmm.sql' 


Restore full
Sintaxe:
psql -p <porta> -U <usuario> -h <host> < <path/nome_arquivo_backup>
Exemplo (com usuário postgres):
~$ psql -p 5432 -U postgres -h localhost < /backup/backup_completo_postgres-AAMMDDhhmm.sql

Tablespace
É essencial conhecer o caminho e nome de tablespace's no ambiente, a fim de evitar surpresas em caso de restores, uma vez que as pastas deste recurso, exceto quelas default, devem ser criadas previamente, com as devidas permissões aplicadas. Veja como saber se há tablespace's em seu ambiente.
~$ psql -p 5432 -h localhost
psql (9.1.2)
Type "help" for help.
postgres=# \c postgres
You are now connected to database "postgres" as user "postgres".
postgres=# SELECT * FROM pg_tablespace ;
  spcname   | spcowner |   spclocation   | spcacl | spcoptions
------------+----------+-----------------+--------+------------
 pg_default |       10 |                 |        |
 pg_global  |       10 |                 |        |
 sobdemanda |       10 | /opt/sobdemanda |        |
(3 rows)

No exemplo acima, foram listadas três tablespaces, sendo "pg_default" o padrão para criação dos bancos de dados, o "pg_global" que é utilizado para os catálogos do sistemas compartilhados, e "sobdemanda", que consiste em uma tablespace criada para exemplificar este item.

Veja também:

Vale lembrar, que os exemplos acima são básicos e facilitam nossos trabalhos no dia a dia, uma vez estes utilitários possuem outros recursos adicionais, a saber.
Help "pg_dumpall"
~$ 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 of
                              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.
Report bugs to <pgsql-bugs@postgresql.org>.

Help "psql"
~$ 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 (default: "postgres")
  -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
Connection options:
  -h, --host=HOSTNAME      database server host or socket directory (default: "local socket")
  -p, --port=PORT          database server port (default: "5432")
  -U, --username=USERNAME  database user name (default: "postgres")
  -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.
Report bugs to <pgsql-bugs@postgresql.org>.

Sem mais, abraço.
Leia mais ...

20 de fevereiro de 2012

Soluções de Backup e Restore para PostgreSQL

Este post, reunirá gradativamente, no decorrer das próximas semanas, algumas opções de backup e restore para aplicação no SGDB PostgreSQL. Eu optei por não colocar todo o conteúdo proposto em um mesmo post, não só pela organização, assim como pela necessidade de parcelamento do tempo, que doarei às matérias. O objetivo é disponibilizar uma solução completa e descomplicada para backup e restore, que estarão organizados de forma a proporcionar o conhecimento de opções distintas e separadas por assunto ou interesse, onde o administrador ou estudante poderá ter entendimento suficiente para decidir qual a melhor forma de aplicação em seu ambiente.
Seguem as opções:
  • Backup Completo PostgreSQL com "pg_dumpall" e "pg_dump" (em breve)
  • Backup PostgreSQL com Point-In-Time Recovery (PITR) (em breve)

Veja também:
Leia mais ...

7 de janeiro de 2012

Configurações adicionais para PostgreSQL 9.1

Em sequência ao post anterior sobre o PostgreSQL, "Instalação PostgreSQL 9.1 32 bits em distro Debian ou Ubuntu", algumas configuraçoes adicionais para funcionamento deste Sistema Gerenciador de Banco de Dados (SGDB) serão mostradas a seguir. O objetivo é preparar o PostgreSQL para receber acesso pela rede, assim como a criação do script de inicialização.
O PostgreSQL oferece uma infinidade de recursos que podem ser aplicados de acordo com a sua necessidade, porém, apenas as principais configurações serão abordadas aqui. Serão utilizados os arquivos "postgresql.conf" e "pg_hba.conf", contidos na pasta do cluster, que em nosso exemplo, no post anterior, foi criado na pasta "/opt/postgresql-9.1.0/pgdata".

Arquivo postgresql.conf
As configurações a seguir serão realizadas no arquivo "postgresql.conf", Edite o referido arquivo e inicie as configurações.
Retire o comentário da configuração da porta.
 - alterar de: #port = 5432
 - para: port = 5432
Para servidor em produção, é recomendado a alteração do número da porta.


Configure a inicialização do serviço do "postgres" pelo ip do seu servidor, permitindo acessos pela rede.
Retire o comentário e altere o parâmetro “listen_address=”.
 - alterar de: #listen_addresses = 'localhost'
 - para: listen_addresses = 'ip_servidor_bd'
É muito comum a utilização de "*" para configuração deste parâmetro, onde o serviço fica em "up" utilizando o ip "0.0.0.0". Este ip, deixa a conexão conforme o endereço de rede corrente. Esta configuração não é recomendada para utilização do SGDB em produção. Utilize o ip do seu servidor de banco de dados.


Configure os logs, descomentando e/ou alterando os parâmetros conforme seguem. A habilitação destes parâmetros não são obrigatórios, e podem ser alterados de acordo com suas necessidades.

Habilite a coleta de logs:

 - alterar de: #logging_collector = off
 - para: logging_collector = on


Habilite a pasta "pg_log" para gravação dos logs. Esta pasta fica no respectivo cluster, referente ao arquivo de configuração "postgresql". Em nosso exemplo, ficará em "/opt/postgresql-9.1.0/pgdata/pg_log":
 - alterar de: #log_directory = 'pg_log'
 - para: log_directory = 'pg_log'

Habilite o "timestamp", para melhor organização e visualização dos arquivos de log:
 - alterar de: #log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
 - para: log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'

Habilite o tempo de rotação para 1(um) dia.
 - alterar de: #log_rotation_age = 1d
 - para: log_rotation_age = 1d

Arquivo pg_hba.conf
Edite o arquivo “pg_hba.conf” para atribuir permissões de acesso de usuário e/ou hosts ao cluster do SGDB. Localize a linha referente ao IPV4, conforme abaixo, e inclua o usuário, base de dados e/ou host que terá acesso ao SGDB, seguindo ordem da coluna.

Veja abaixo o arquivo antes da configuração:
   # TYPE  DATABASE        USER            ADDRESS                 METHOD
   # IPv4 local connections:
   host       all                      all                 127.0.0.1/32              trust


Exemplo para permissão de acesso para usuário postgres em todas as base de dados a partir do ip 192.168.1.20, utilizando método de autenticação "md5".
Veja abaixo as linhas após a configuração:
   # TYPE  DATABASE        USER            ADDRESS                 METHOD
   # IPv4 local connections:
   host    all                         all              127.0.0.1/32              trust
   host    all                         postgres    192.168.1.0/24           md5


O arquivo de configuração "pg_hba.conf" oferece bastante flexibilidade em sua configuração, e dependendo de como é feito, pode deixar "brechas" de segurança em seu SGDB, ou seja, permitindo acessos não autorizados aos bancos de dados. Como não é o foco deste post falar sobre o "pg_hba.conf", a principal dica é observar as colunas nos qual as informações são inseridas para permissões de acessos. Fazendo uma leitura do nosso exemplo, citado acima, foi atribuido permissão de acesso a todos os bancos de dados, para o usuário "postgres", no range de ip "192.168.1.0", utilizando autenticação md5.

Configurar script de inicialização
O PostgreSQL já vem com um script pré configurado para facilitar a inicialização do SGDB. Copie e configure o arquivo conforme abaixo.

~$ cp /opt/download/postgresql-9.1.0/contrib/start-scripts/linux /etc/init.d/postgresql-9.1.0
~$ sudo chmod +x /etc/init.d/postgresql-9.1.0


Configure o arquivo, editando-o e alterando os parâmetros abaixo.
Altere o parâmetro "prefix" de acordo com o caminho da instalação, que em nosso exemplo ficará.
 - alterar de: prefix=/usr/local/pgsql
 - para: prefix=/opt/postgresql-9.1.0

Altere o parâmetro "PGDATA", que indica a localização do cluster.
 - alterar de: "/usr/local/pgsql/data"
 - para: "/opt/postgresql-9.1.0/pgdata"


Digite o comando abaixo para que o SGDB inicialize automaticamente durante o boot do seu servidor, quando necessário.
~$ sudo update-rc.d postgresql-9.1.0-nome_projeto01 defaults 99


Após as configurações, o cluster pode ser inicializado ou parado conforme abaixo a sintaxe abaixo.
Usar: /etc/init.d/postgresql-9.1.0 {start|stop|restart|reload|status}



Para concluir, quando trabalhamos com banco em produção, é importante saber qual o momento de realizar a reinicialização ou o reload no SGDB, após configurações. No caso do PostgreSQL, essas configurações são realizadas no arquivo "postgresql.conf", como já sabemos. Para obter esta informação, acesse o PostgreSQL e execute o comando "SQL" citado abaixo, para verificar a característica do parâmetro. Foi utilizado como exemplo parâmetro "port", que alteramos acima.
~$ su - postgres
~$ psql -p 5432
postgres=# select name, setting, context from pg_settings where name~ 'port';
 name | setting |  context  
------+---------+------------
 port | 5432    | postmaster
(1 row)

Quando o registro do campo "context" for igual a "postmaster", realizar a reinicialização do serviço e quando for "sighup", apenas o reload é suficiente para que a configuração seja efetivada no ambiente.

Com relação ao arquivo de configuração "pg_hba.conf", sempre que alterado, apenas o reload é necessário para efetivação de configurações.

Com estas informações, o planejamento de mudanças e precauções contra impactos no ambiente podem ser realizados com segurança. Outros parâmetros configuráveis, contidos no arquivo "postgresql.conf" constam na tabela "pg_settings", podem ser consultados.

Veja também:

No mais, é Sob Demanda!
Leia mais ...

30 de dezembro de 2011

Instalação PostgreSQL 9.1 32 bits em distro Debian ou Ubuntu

O PostgreSQL é um Sistema Gerenciador de Banco de Dados (SGDB) open source, mantido pelo PostgreSQL Global Development Group.
Vamos instalar a versão para compilação, seguido da criação do usuário "postgres" e a criação do cluster.

Faça o download a partir do ftp repositório oficial do PostgreSQL
~$ sudo wget http://ftp.postgresql.org/pub/source/v9.1.0/postgresql-9.1.0.tar.gz
Descompacte o pacote.
~$ sudo mkdir /opt/download
~$ sudo tar -vzxf ./postgresql-9.1.0.tar.gz -C /opt/download 
~$ cd /opt/download/postgresql-9.1.0

Instale as dependências abaixo, antes de iniciar a instalação.
~$ sudo aptitude install build-essential zlib1g-dev libreadline5-dev libc6-dev

Execute o comando abaixo, para compilar o PostgreSQL 9.1, passando o caminho para instalação em "--prefix=".
~$ sudo ./configure --prefix=/opt/postgresql-9.1.0

Execute o comando para instalar.
~$ sudo make && make install

Crie usuário "postgres"
~$ sudo adduser postgres


Quando o PostgreSQL for funcionar em produção, recomenda-se como boas práticas, a criação do usuário "postgres" com o login desabilitado. Para criar o usuário com esta característica, passar o parâmetro "--disabled-login" logo após o comando de criação. Neste caso, o acesso utilizando o usuário "postgres" deverá ser a partir do usuário "root", somente.

Adicione o caminho da instalação do PostgreSQL no arquivo "/etc/profile", para configurar a variável de ambiente PATH de sua distro. Edite o arquivo "/etc/profile" e inclua a linha abaixo
export PATH=$PATH:/opt/postgresql-9.1.0/bin

Execute o comando abaixo para aplicar a última configuração.
~$ source /etc/profile

Verifique se a variável de ambiente foi configurada corretamente, executando o comando abaixo.
~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/postgresql-9.1.0/bin


Agora que o serviço do SGDB está completamente instalado, crie o cluster do seu banco de dados.
Crie uma pasta e atribua permissões a mesma para criação do cluster. Se o cluster for criado em uma pasta na profile do usuário "postgres" não é necessário a criação da pasta. Basta executar o comando "initdb" para criação da mesma.
Neste exemplo, crie a pasta "pgdata", fora da profile do postgres, na pasta de instalação do PostgreSQL, executando os comandos abaixo.
~$ sudo mkdir /opt/postgresql-9.1.0/pgdata
~$ sudo chmod -R 774 /opt/postgresql-9.1.0/pgdata/
~$ sudo chown -R postgres.postgres /opt/postgresql-9.1.0/pgdata/

Execute o comando abaixo para entrar com o usuário "postgres".
~$ su - postgres

Crie o cluster na pasta /opt/postgresql-9.1.0/pgdata.
~$ initdb -D /opt/postgresql-9.1.0/pgdata/

Após criação do cluster, iniciálize-o utilizando o comando abaixo
~$ pg_ctl -D /opt/postgresql-9.1.0/pgdata start

Pronto, o banco já está instalado. Execute o comando abaixo para acessá-lo.
~$ psql -h localhost

psql (9.1.0)
Type "help" for help.

postgres=#

Digite \q para sair.

Para parar o serviço, utilize.
~$ pg_ctl -D /opt/postgresql-9.1.0/pgdata stop

Veja também:
- Configurações adicionais para PostgreSQL 9.1
- Integração do PostgreSQL 9.1 ao Pentaho BI Server CE 3.10.0

No mais, é Sob Demanda!
Leia mais ...