-
Notifications
You must be signed in to change notification settings - Fork 0
Install PostgREST
As decisões de proejeto na infraestrutura AddressForAll incluem:
- uso do PostgreSQL v12 (+PostGIS etc.) em ambiente UBUNTU 20 LTS, direto (sem dockagem).
- uso do PostgREST v7.0, dockado e conectado ao PostgreSQL principal (não-dockado).
No Guia essa opção é descrita como "run the PostgREST container (...) with an existing external database" ou "... connect it to an existing native database on the host".
Testes no servidor, provavelmente com instalação parcial. Seguindo o passo-a-passo do Guia/Install/Docker e mais alguns relativos ao projeto.
Passo01. sudo docker pull postgrest/postgrest resulta em
Using default tag: latest
latest: Pulling from postgrest/postgrest
c499e6d256d6: Pull complete
a435bd9a4588: Pull complete
dbcbbf731db2: Pull complete
42f850f7ea21: Pull complete
Digest: sha256:2a10713acc388f9a64320443e949eb87a0424ab280e68c4ed4a6d0653c001586
Status: Downloaded newer image for postgrest/postgrest:latest
docker.io/postgrest/postgrest:latest
Passo02. Conferindo configurações default. sudo docker inspect -f "{{.Config.Env}}" postgrest/postgrest resulta em
[PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PGRST_DB_URI= PGRST_DB_SCHEMA=public PGRST_DB_ANON_ROLE= PGRST_DB_POOL=100
PGRST_DB_EXTRA_SEARCH_PATH=public PGRST_SERVER_HOST=*4 PGRST_SERVER_PORT=3101
PGRST_OPENAPI_SERVER_PROXY_URI= PGRST_JWT_SECRET= PGRST_SECRET_IS_BASE64=false
PGRST_JWT_AUD= PGRST_MAX_ROWS= PGRST_PRE_REQUEST= PGRST_ROLE_CLAIM_KEY=.role
PGRST_ROOT_SPEC= PGRST_RAW_MEDIA_TYPES=
]
Passo03. Conferindo ou preparando dados de teste. Ver Install City codes para testes e produção, onde temos garantia de optim.city. Então basta uma view no schema API, ou seja,
CREATE VIEW api.city AS SELECT * FROM optim.city; -- só vai publicar no PostgREST se for membro do schema API.Passo04. Conferindo o que rola na porta eleita (acima indicada como PGRST_SERVER_PORT=3101). Primeiro ver como o localhost está se comportando no terminal, com wget -O - http://localhost | more (retorna "Welcome to nginx!" ou qualquer outro HTML default). Aí conferir se a porta está em uso (precisa retornar erro "failed: Connection refused") com wget -O - http://localhost:3101 | more.
Passo05. Instalando na porta default (3101) com a base de dados desejada. Elegeremos aqui a base principal de teste, dl03t_main. Para ter certeza da connection string, basta ver se não dá erro em psql "postgres://postgres@localhost/dl03t_main". Aproveitar e conferir com \d se existem tabelas gravadas no esquema desejado (eleito por hora o public que é o default). Usando isso então na variável PGRST_DB_URI:
sudo docker run --rm --net=host -p 3101:3101 \
-e PGRST_DB_URI="postgres://postgres@localhost/dl03t_main" \
-e PGRST_DB_ANON_ROLE="postgres" \
-e PGRST_DB_SCHEMA="api" \
-e PGRST_SERVER_PORT=3101 \
postgrest/postgrestIsso vai travar o terminal. Abrir outro para terminar o teste...
Passo06. Testando o PostgREST com nossos dados!
- Verificando se o JSON default (swagger) aparece na raiz,
wget -O - http://localhost:3101 | more. - Verificando se o JSON da tabela teste aparece com
wget -O - http://localhost:3101/city?limit=3| more, que retorna 3 primeiros municípios. - Verificando se automático também para agregações (abaixo),
wget -O - http://localhost:3101/dim_state | more
CREATE VIEW api.dim_state AS
SELECT state, COUNT(*) as qt_city
FROM api.city GROUP BY 1 ORDER BY 1;Passo07. Fechar o terminal (ou ^C) para implenentar o PostgREST em modo persistente... e testar online.
...
Passo08. preparar no NGINX a chamada com URL amigável...
#
# Endpoints da API PostgREST, exemplo com localhost
#
server {
server_name localhost;
root /var/www/;
index index.php index.html index.htm;
# JSON SQL & RPC, API gatewaays implementation:
location /_sql.csv/ {
proxy_set_header Accept 'text/csv';
proxy_pass http://localhost:3101/;
}
location /_sql.json/ {
proxy_pass http://localhost:3101/;
}
location /_sql/ {
proxy_pass http://localhost:3101/;
}
}Passo09. Variante dos testes anteriores, testando a API gateway do NGINX.
-
wget -O - http://localhost/_sql| more. -
wget -O - http://localhost/_sql/city?limit=3 | more. -
wget -O - http://localhost/_sql/dim_state | more.
Passo10. preparar tabelas do state-codes para fazer JOINs e obter uma primeira versão dos serviços de OSM.codes/br.
(wiki temporária!)