Pesquisa de site

Descarte seu banco de dados para PostgreSQL


Postgres é um dos bancos de dados mais flexíveis disponíveis e é de código aberto.

Bancos de dados são ferramentas para armazenar informações de forma organizada, mas flexível. Uma planilha é essencialmente um banco de dados, mas as restrições de um aplicativo gráfico tornam a maioria dos aplicativos de planilhas inúteis para os programadores. Com os dispositivos Edge e IoT se tornando plataformas-alvo significativas, os desenvolvedores precisam de soluções poderosas, porém leves, para armazenar, processar e consultar grandes quantidades de dados. Uma das minhas combinações favoritas é o banco de dados PostgreSQL e as ligações Lua, mas as possibilidades são infinitas. Qualquer que seja a linguagem que você use, o Postgres é uma ótima opção para banco de dados, mas você precisa saber alguns princípios básicos antes de adotá-lo.

Instale o Postgres

Para instalar o PostgreSQL no Linux, use seu repositório de software. No Fedora, CentOS, Mageia e similares:

$ sudo dnf install postgresql postgresql-server

No Debian, Linux Mint, Elementary e similares:

$ sudo apt install postgresql postgresql-contrib

No macOS e no Windows, baixe um instalador em postgresql.org.

Configurando Postgres

A maioria das distribuições instala o banco de dados Postgres sem iniciá-lo, mas fornece um script ou serviço systemd para ajudá-lo a iniciar de forma confiável. Entretanto, antes de iniciar o PostgreSQL, você deve criar um cluster de banco de dados.

Fedora

No Fedora, CentOS ou similar, há um script de configuração do Postgres fornecido no pacote Postgres. Execute este script para fácil configuração:

$ sudo /usr/bin/postgresql-setup --initdb
[sudo] password:
 * Initializing database in '/var/lib/pgsql/data'
 * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log

Debian

Nas distribuições baseadas em Debian, a configuração é realizada automaticamente pelo apt durante a instalação.

Todo o resto

Finalmente, se você estiver executando outra coisa, basta usar o conjunto de ferramentas fornecido pelo próprio Postgres. O comando initdb cria um cluster de banco de dados, mas você deve executá-lo como o usuário postgres, uma identidade que você pode assumir temporariamente usando sudo:

$ sudo -u postgres \
"initdb -D /var/lib/pgsql/data \
--locale en_US.UTF-8 --auth md5 --pwprompt"

Iniciar Postgres

Agora que existe um cluster, inicie o servidor Postgres usando o comando fornecido na saída de initdb ou com systemd:

$ sudo systemctl start postgresql

Criando um usuário de banco de dados

Para criar um usuário Postgres, use o comando createuser. O usuário postgres é o superusuário da instalação do Postgres,

$ sudo -u postgres createuser --interactive --password bogus
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n
Password:

Crie um banco de dados

Para criar um novo banco de dados, use o comando createdb. Neste exemplo, eu crio o banco de dados exampledb e atribuo a propriedade dele ao usuário bogus:

$ createdb exampledb --owner bogus

Interagindo com PostgreSQL

Você pode interagir com um banco de dados PostgreSQL usando o comando psql. Este comando fornece um shell interativo para que você possa visualizar e atualizar seus bancos de dados. Para se conectar a um banco de dados, especifique o usuário e o banco de dados que deseja usar:

$ psql --user bogus exampledb
psql (XX.Y)
Type "help" for help.

exampledb=>

Crie uma tabela

Os bancos de dados contêm tabelas, que podem ser visualizadas como uma planilha. Há uma série de linhas (chamadas registros em um banco de dados) e colunas. A interseção de uma linha e uma coluna é chamada de campo.

A Linguagem de Consulta Estruturada (SQL) tem o nome do que fornece: Um método para consultar o conteúdo de um banco de dados em uma sintaxe previsível e consistente para receber resultados úteis.

Atualmente, seu banco de dados está vazio, sem tabelas. Você pode criar uma tabela com a consulta CREATE. É útil combinar isso com a instrução IF NOT EXISTS, que evita que o PostgreSQL destrua uma tabela existente.

Antes de criar uma tabela, pense sobre que tipo de dados (o "tipo de dados" na terminologia SQL) você prevê que a tabela conterá. Neste exemplo, crio uma tabela com uma coluna para um identificador exclusivo e uma coluna para algum texto arbitrário de até nove caracteres.

exampledb=> CREATE TABLE IF NOT EXISTS my_sample_table(
exampledb(> id SERIAL,
exampledb(> wordlist VARCHAR(9) NOT NULL
);

A palavra-chave SERIAL não é realmente um tipo de dados. É uma notação especial no PostgreSQL que cria um campo inteiro com incremento automático. A palavra-chave VARCHAR é um tipo de dados que indica um número variável de caracteres dentro de um limite. Neste código, especifiquei no máximo 9 caracteres. Existem muitos tipos de dados no PostgreSQL, portanto consulte a documentação do projeto para obter uma lista de opções.

Inserir dados

Você pode preencher sua nova tabela com alguns dados de amostra usando a palavra-chave SQL INSERT:

exampledb=> INSERT INTO my_sample_table (wordlist) VALUES ('Alice');
INSERT 0 1

Sua entrada de dados falhará caso você tente colocar mais de 9 caracteres no campo wordlist:

exampledb=> INSERT INTO my_sample_table (WORDLIST) VALUES ('Alexandria');
ERROR:  value too long for type character varying(9)

Alterar uma tabela ou coluna

Quando precisar alterar uma definição de campo, você usa a palavra-chave SQL ALTER. Por exemplo, se você decidir que há um limite de nove caracteres para lista de palavras, você pode aumentar seu limite definindo seu tipo de dados:

exampledb=> ALTER TABLE my_sample_table
ALTER COLUMN wordlist SET DATA TYPE VARCHAR(10);
ALTER TABLE
exampledb=> INSERT INTO my_sample_table (WORDLIST) VALUES ('Alexandria');
INSERT 0 1

Ver dados em uma tabela

SQL é uma linguagem de consulta, portanto você visualiza o conteúdo de um banco de dados por meio de consultas. As consultas podem ser simples ou envolver a união de relacionamentos complexos entre diversas tabelas diferentes. Para ver tudo em uma tabela, use a palavra-chave SELECT em * (um asterisco é um curinga):

exampledb=> SELECT * FROM my_sample_table;
 id |  wordlist
\----+------------
  1 | Alice
  2 | Bob
  3 | Alexandria
(3 rows)

Mais dados

O PostgreSQL pode lidar com muitos dados, mas como acontece com qualquer banco de dados, a chave para o sucesso é como você projeta seu banco de dados para armazenamento e o que você faz com os dados depois de armazená-los. Um conjunto de dados públicos relativamente grande pode ser encontrado em OECD.org e, usando-o, você pode experimentar algumas técnicas avançadas de banco de dados.

Primeiro, baixe os dados como valores separados por vírgula (CSV) e salve o arquivo como land-cover.csv em sua pasta Downloads.

Navegue pelos dados em um editor de texto ou aplicativo de planilha para ter uma ideia de quais colunas existem e que tipo de dados cada coluna contém. Observe os dados com atenção e fique atento às exceções a uma regra aparente. Por exemplo, a coluna COU, contendo um código de país como AUS para Austrália e GRC para Grécia, tende a ter 3 caracteres até a estranheza BRIICS.

Depois de entender os dados com os quais está trabalhando, você poderá preparar um banco de dados Postgres:

$ createdb landcoverdb --owner bogus
$ psql --user bogus landcoverdb
landcoverdb=> create table land_cover(
country_code varchar(6),
country_name varchar(76),
small_subnational_region_code varchar(5),
small_subnational_region_name varchar(14),
large_subnational_region_code varchar(17),
large_subnational_region_name varchar(44),
measure_code varchar(13),
measure_name varchar(29),
land_cover_class_code varchar(17),
land_cover_class_name varchar(19),
year_code integer,
year_value integer,
unit_code varchar(3),
unit_name varchar(17),
power_code integer,
power_name varchar(9),
reference_period_code varchar(1),
reference_period_name varchar(1),
value float(8),
flag_codes varchar(1),
flag_names varchar(1));

Importando dados

O Postgres pode importar dados CSV diretamente usando o metacomando especial \copy:

landcoverdb=> \copy land_cover from '~/land-cover.csv' with csv header delimiter ','
COPY 22113

São 22.113 registros importados. Parece um bom começo!

Consultando dados

Uma ampla instrução SELECT para ver todas as colunas de todos os 22.113 registros é possível, e o Postgres canaliza muito bem a saída para um pager de tela para que você possa rolar pela saída em um ritmo lento. No entanto, usando SQL avançado, você pode obter algumas visualizações úteis do que, de outra forma, seriam dados bastante brutos.

landcoverdb=> select
    lcm.country_name,
    lcm.year_value,
    sum(lcm.value) sum_value
from land_cover lcm
join (
    select
        country_name,
        large_subnational_region_name,
        small_subnational_region_name,
        max(year_value) max_year_value
    from land_cover
    group by country_name,
        large_subnational_region_name,
        small_subnational_region_name
) as lcmyv
on
    lcm.country_name = lcmyv.country_name and
    lcm.large_subnational_region_name = lcmyv.large_subnational_region_name and
    lcm.small_subnational_region_name = lcmyv.small_subnational_region_name and
    lcm.year_value = lcmyv.max_year_value
group by lcm.country_name,
    lcm.large_subnational_region_name,
    lcm.small_subnational_region_name,
    lcm.year_value
order by country_name,
    year_value;

Aqui está um exemplo de saída:

\---------------+------------+------------
 Afghanistan    |       2019 |  743.48425
 Albania        |       2019 |  128.82532
 Algeria        |       2019 |  2417.3281
 American Samoa |       2019 |   100.2007
 Andorra        |       2019 |  100.45613
 Angola         |       2019 |  1354.2192
 Anguilla       |       2019 | 100.078514
 Antarctica     |       2019 |  12561.907
[...]

SQL é uma linguagem rica e, portanto, está além do escopo deste artigo. Leia o código SQL e veja se você pode modificá-lo para fornecer um conjunto diferente de dados.

Banco de dados aberto

PostgreSQL é um dos grandes bancos de dados de código aberto. Com ele, você pode projetar repositórios para dados estruturados e, em seguida, usar SQL para visualizá-los de diferentes maneiras, para obter novas perspectivas sobre esses dados. O Postgres se integra a muitas linguagens, incluindo Python, Lua, Groovy, Java e muito mais, portanto, independentemente do seu conjunto de ferramentas, você provavelmente poderá usar este excelente banco de dados.

Artigos relacionados: