O PostgreSQL é um sistema gerenciador de banco de dados objeto relacional (SGBDOR), desenvolvido como projeto de código aberto. Veja mais nesse link para instalação/configuração PostgreSQL e phpPgAdmin. Algumas versões mais recentes do pgAdmin permitem acesso via browser, através do IP da servidora do banco de dados seguido de login e senha (de modo geral).
Muda bem pouca coisa do MySQL para o PostgreSQL (por exemplo, mysql_connect muda para pg_connect) – veja mais sobre Banco de Dados, MySQL, linguagem SQL e integração com PHP clicando no link. Uma diferença é que o agrupamento de tabelas utiliza outro conceito, o “schema”: relaciona objetos (tabelas, índices, sequence, etc) que estão no mesmo banco de dados, mas em estruturas lógicas (namespace) distintas.A localização de uma tabela fica subordinada ao schema e à database na forma “database_name.schema_name.table_name”.
Front-end de terminal psql
Ao conectar via linha de comando, já deve ser informada a database a ser utilizada, como se segue (instalação através de “sudo apt install postgresql-client-common”):
psql -h $host -U $user -W $dbname
Veja alguns comandos próprios do psql:
\d - lista as tabelas do banco de dados \l - lista os bancos de dados \h - lista os comandos SQL \q - sair do psql
Segue um exemplo de um script que conecta em um banco de dados sem a necessidade de digitar a senha (parâmetro “-w”) e executa duas queries, definidas previamente em duas variáveis:
query1="SELECT * FROM table;" query2="INSERT INTO table(local,valor,data) VALUES ($local,$id,$valor,'$data');" host=nome_pc user=usuario dbname=base_dados psql -h $host -U $user -W $dbname -w << EOF $query1 $query2 EOF # Alternativa se as queries estiverem no arquivo queries.sql psql -h $host -U $user -W $dbname -f queries.sql # Alternativa para guardar o resultado em uma variável: usar -qtA resultado=$(psql -qtA -h $host -U $user -W $dbname -f queries.sql)
Outra opção para fazer um login sem ter que digitar a senha, é possível usar o arquivo “~/.pgpass” com a seguinte sintaxe: hostname:port:database:username:password (a porta padrão é a 5432). Esse arquivo deve estar com permissões de leitura e escrita somente para o usuário (600). Setar a senha como variável de ambiente (set PGPASSWORD=your_password) está obsoleto.
Arquivos CSV
Outra forma de inserir dados na base seria criar um arquivo CSV com as informações a serem adicionadas e executar a seguinte query:
COPY schema.table_name FROM '/home/user/file.csv' using delimiters ',';
Essa linha também pode ser executada diretamente no terminal SQL do pgAdmin III (outra interface de administração do PostgreSQL). Para isso, deve-se antes acessar o banco de dados e clicar na tabela criada previamente a receber os dados para então abrir o terminal SQL.
Veja também como inserir arquivos CSV no banco de dados Postgres clicando no link.
Criar tabela
O script SQL a seguir cria a tabela “nome_tabela” no schema “public”, com a primeira linha comentada para excluir totalmente alguma tabela que já exista através do comando DROP (o comando TRUNCATE mantém a estrutura). Os identificadores de objeto (OIDs), utilizados internamente pelo PostgreSQL como chaves primárias, não serão utilizados (depreciado). Além disso, é alterado o dono da tabela e são adicionadas permissões de uso total para o usuário “operacao” e de seleção para o usuário de web “www”.
-- DROP TABLE public.nome_tabela; CREATE TABLE public.nome_tabela ( datarodada timestamp with time zone NOT NULL, dataprevisao timestamp with time zone NOT NULL, var1 integer, var2 real, var3 character varying, CONSTRAINT nome_tabela_pkey PRIMARY KEY (var1) ) WITH ( OIDS=FALSE ); ALTER TABLE public.nome_tabela OWNER TO operacao; GRANT ALL ON TABLE nome_tabela TO operacao; GRANT SELECT ON TABLE nome_tabela TO www;
Com relação às colunas, são criadas duas para receber datas com horários no formato “timestamp” (com fuso horário) e que não devem estar vazia (NOT NULL), uma para receber valores inteiros, outra para ponto flutuante (equivalente a float(24)) e a última recebendo caracteres de comprimento variável (varying) sem limite (para limite, usar (n), onde n é o número de caracteres.
O comando “CONSTRAINT” é usado para especificar regras para dados em uma tabela. Nesse caso, especifica a coluna “var1” como chave primária (seus valores nunca devem se repetir na tabela, o que permite ser usada como referência de cada linha).
Monitorar conexões
Uma forma de monitorar as conexões realizadas no Postgres é executar o comando “ps -aux | grep pgsql” no terminal do computador que estiver com o programa instalado – acrescente “wc -l” depois de um pipe no final do comando para saber o total de processos. Outra forma é executar o seguinte comando na database “pgsql” schema “Catalogs”:
SELECT * FROM pg_stat_activity;
A tabela que retorna contém as conexões no momento da consulta – uma descrição de cada coluna é informada no link. A seguinte query revela o máximo de conexões que está autorizado a ter:
SELECT min_val,max_val FROM pg_settings where name='max_connections';
O máximo de consultas geralmente é definido no campo “max_connections” dentro do arquivo “postgresql.conf”. O padrão é de 100 conexões; se ultrapassar do limite estabelecido, será retornada a mensagem “postgres[ID] FATAL: sorry, too many clients already” no log do sistema (arquivo “/var/log/messages”). Somente reiniciando o banco de dados para retomar o serviço e abrir novas conexões:
$ sudo /usr/local/etc/rc.d/postgresql stop $ sudo /usr/local/etc/rc.d/postgresql start
Se algum script abrir uma conexão sem fechá-las, o Postgres dá um tempo após sua última ação e a fecha por “timeout”.
2 comments