PostgreSQL ist meine Entwicklungsumgebung - Linuxwochen

Die Seite wird erstellt Raik Wilke
 
WEITER LESEN
PostgreSQL ist meine Entwicklungsumgebung - Linuxwochen
PostgreSQL ist meine Entwicklungsumgebung
               Balázs Bárány

                  2019-05-02
Überblick

   I Motivation
   I PostgreSQL
   I Erweiterungen
   I Foreign Data Wrappers
   I API-Nutzung
            I APIs konsumieren
            I APIs anbieten

Balázs Bárány                 Linuxwochen Wien 2019   1 / 35
Motivation

   I Data Scientist
            I Kein Entwickler (ist lange her. . . )
            I Beratung für Datenanalyse, Vorhersagen, Datenbanken, . . .
            I Mitbegründer des Motorroller-Sharings SCO2T (jetzt mo2drive)

Balázs Bárány                           Linuxwochen Wien 2019              2 / 35
Motivation

   I Data Scientist
            I Kein Entwickler (ist lange her. . . )
            I Beratung für Datenanalyse, Vorhersagen, Datenbanken, . . .
            I Mitbegründer des Motorroller-Sharings SCO2T (jetzt mo2drive)

   I Werkzeuge und Arbeitsmittel
            I Datenbanken, z. B. PostgreSQL
                     I Andere Datensammlungen, Dateien, . . .
            I      Datenintegrationswerkzeuge, z. B. Pentaho Data Integration
            I      Data-Mining-Werkzeuge, z. B. RapidMiner
            I      Scripting: Shell, R, jq, . . .
            I      Web-APIs
            I      Open Data

Balázs Bárány                                 Linuxwochen Wien 2019          2 / 35
“Entwicklungs”aufgaben

   I Datenintegration
            I      Import aus Dateien
            I      Andere Datenbanken
            I      Externe Systeme: CRM, . . .
            I      Open Data
            I      Web-APIs

Balázs Bárány                                 Linuxwochen Wien 2019   3 / 35
“Entwicklungs”aufgaben

   I Datenintegration
            I      Import aus Dateien
            I      Andere Datenbanken
            I      Externe Systeme: CRM, . . .
            I      Open Data
            I      Web-APIs

   I Alternative Werkzeuge
            I Grafische Datenintegrationswerkzeuge
            I Befehlszeilen-Werkzeuge
            I (Scripting)

Balázs Bárány                                 Linuxwochen Wien 2019   3 / 35
PostgreSQL

   I Führende Open-Source-Datenbank
            I In Features, Standardkonformität, Dokumentation, . . .
            I (noch) nicht in der Verbreitung

Balázs Bárány                             Linuxwochen Wien 2019      4 / 35
PostgreSQL

   I Führende Open-Source-Datenbank
            I In Features, Standardkonformität, Dokumentation, . . .
            I (noch) nicht in der Verbreitung

   I Offen für Erweiterungen
            I Skriptsprachen
            I Funktionserweiterungen
            I Foreign Data Wrappers

Balázs Bárány                             Linuxwochen Wien 2019      4 / 35
PostgreSQL

   I Führende Open-Source-Datenbank
            I In Features, Standardkonformität, Dokumentation, . . .
            I (noch) nicht in der Verbreitung

   I Offen für Erweiterungen
            I Skriptsprachen
            I Funktionserweiterungen
            I Foreign Data Wrappers

   I Großartige Community

Balázs Bárány                             Linuxwochen Wien 2019      4 / 35
Warum in der Datenbank?

   I SQL
            I Deklarativ - kein Debuggen
            I Sehr mächtig
            I Stabil, zuverlässig

Balázs Bárány                           Linuxwochen Wien 2019   5 / 35
Warum in der Datenbank?

   I SQL
            I Deklarativ - kein Debuggen
            I Sehr mächtig
            I Stabil, zuverlässig

   I Die Daten sind schon da!
            I Warum anderswo verarbeiten?

Balázs Bárány                            Linuxwochen Wien 2019   5 / 35
Warum in der Datenbank?

   I SQL
            I Deklarativ - kein Debuggen
            I Sehr mächtig
            I Stabil, zuverlässig

   I Die Daten sind schon da!
            I Warum anderswo verarbeiten?

   I Nutze, was für dich am besten funktioniert!

Balázs Bárány                            Linuxwochen Wien 2019   5 / 35
Unterstützung für Skriptsprachen in PostgreSQL

   I Eingebaut: PL/SQL, PL/PgSQL
            I Sehr SQL-lastig, prozedural
   I Verfügbar
            I      PL/Perl
            I      PL/Python
            I      PL/R
            I      Java, Shellscript, . . .

Balázs Bárány                              Linuxwochen Wien 2019   6 / 35
Beispieldaten

   I Bezirksgrenzen von OGD Wien

https://data.gv.at/katalog/dataset/2ee6b8bf-6292-413c-bb8b-bd22dbb2ad4b

-- Erst die Tabelle mit dem Format der Daten anlegen
CREATE TABLE opendata.wien_bezirke
(
    "FID" text,
    "SHAPE" text,
    ...
)

Balázs Bárány                   Linuxwochen Wien 2019           7 / 35
Eingebauter CSV-Import

   I Direkt aus CSV importieren

copy opendata.wien_bezirke
from ’/tmp/BEZIRKSGRENZEOGD.csv’
with (FORMAT CSV, HEADER);

-- Ohne zwischendurch herunterzuladen
copy opendata.wien_bezirke
from program ’curl -s ’’https://data.wien.gv.at/daten/geo?...=csv’’’
with (FORMAT CSV, HEADER);

Balázs Bárány                  Linuxwochen Wien 2019            8 / 35
Diskussion

   I CSV-Import und Export
            I Verschiedene Formate (Trennzeichen, Quoting, Encoding, . . . )
            I Nur ganze Tabelle, muß schon angelegt sein
            I Nur Superuser oder speziell privilegiert

Balázs Bárány                            Linuxwochen Wien 2019              9 / 35
Diskussion

   I CSV-Import und Export
            I Verschiedene Formate (Trennzeichen, Quoting, Encoding, . . . )
            I Nur ganze Tabelle, muß schon angelegt sein
            I Nur Superuser oder speziell privilegiert

   I Sicherheitsaspekte
            I Diskussion im April 2019, CVE-2019-9193
                   I “Datenbankbenutzer kann beliebige Programme am Server ausführen!”

Balázs Bárány                              Linuxwochen Wien 2019                       9 / 35
Diskussion

   I CSV-Import und Export
            I Verschiedene Formate (Trennzeichen, Quoting, Encoding, . . . )
            I Nur ganze Tabelle, muß schon angelegt sein
            I Nur Superuser oder speziell privilegiert

   I Sicherheitsaspekte
            I Diskussion im April 2019, CVE-2019-9193
                   I “Datenbankbenutzer kann beliebige Programme am Server ausführen!”
            I Statement vom Projekt: Keine Sicherheitslücke

Balázs Bárány                              Linuxwochen Wien 2019                       9 / 35
Diskussion

   I CSV-Import und Export
            I Verschiedene Formate (Trennzeichen, Quoting, Encoding, . . . )
            I Nur ganze Tabelle, muß schon angelegt sein
            I Nur Superuser oder speziell privilegiert

   I Sicherheitsaspekte
            I Diskussion im April 2019, CVE-2019-9193
                   I “Datenbankbenutzer kann beliebige Programme am Server ausführen!”
            I Statement vom Projekt: Keine Sicherheitslücke
            I Aufpassen, wer was darf!
                   I Nicht alle User als Superuser
                   I Hausverstand

Balázs Bárány                                Linuxwochen Wien 2019                     9 / 35
Scripting ohne “Programmierung”

   I Verwendung von High-Level-Funktionen aus Scripting-Sprachen
            I keine oder wenig Programmlogik

Balázs Bárány                          Linuxwochen Wien 2019    10 / 35
Scripting ohne “Programmierung”

   I Verwendung von High-Level-Funktionen aus Scripting-Sprachen
            I keine oder wenig Programmlogik

-- Die Skriptsprache PL/R laden
CREATE EXTENSION plr;

-- Funktion zum Laden der Bezirke-CSV erstellen
create or replace function r_bezirke (text)
returns setof opendata.wien_bezirke
as $func$
    return(read.csv(arg1))
$func$
language ’plr’ volatile;
Balázs Bárány                          Linuxwochen Wien 2019    10 / 35
Anwendung für Datenimport

-- flexiblere Abfragen möglich
select *
from r_bezirke(’/tmp/BEZIRKSGRENZEOGD.csv’)
where "BEZNR" < 20
order by "FLAECHE" DESC;

-- paßt, in die Tabelle einfügen
insert into opendata.wien_bezirke
select * from r_bezirke(’/tmp/BEZIRKSGRENZEOGD.csv’);

Balázs Bárány             Linuxwochen Wien 2019      11 / 35
Anwendung für Datenimport

-- flexiblere Abfragen möglich
select *
from r_bezirke(’/tmp/BEZIRKSGRENZEOGD.csv’)
where "BEZNR" < 20
order by "FLAECHE" DESC;

-- paßt, in die Tabelle einfügen
insert into opendata.wien_bezirke
select * from r_bezirke(’/tmp/BEZIRKSGRENZEOGD.csv’);

-- Wozu herunterladen? R kann URLs direkt verarbeiten.
insert into opendata.wien_bezirke
select * from r_bezirke(’https://data.wien.gv.at/...csv’);

Balázs Bárány             Linuxwochen Wien 2019           11 / 35
Interessante Erweiterungen

   I Skriptsprachen sind noch zu schwierig?
   I PGXN - PostgreSQL extension network
   I pgFoundry - Hosting für Postgres-bezogene Projekte
   I Beispiele
            I PostGIS – Alles für Geometrie und Geodaten
            I pgsql http – HTTP-Client
            I PostPic – Bildverarbeitung

Balázs Bárány                           Linuxwochen Wien 2019   12 / 35
Beispiele mit pgsql http

-- HTTP-Extension: https://github.com/pramsey/pgsql-http
create extension http;

-- Holen wir jetzt das GeoJSON-Dokument!
select content
from http_get(’https://data.wien.gv.at/daten/geo?...&outputFormat=json’)

[content]
{"type":"FeatureCollection","totalFeatures":23,"features":[...}

Balázs Bárány             Linuxwochen Wien 2019                 13 / 35
Weiterverarbeitung des JSON-Dokuments

select jsonb_array_elements(content::jsonb->’features’) as features
from http_get(’https://data.wien.gv.at/daten/geo?...&outputFormat=json’)

[features]
{"id": "BEZIRKSGRENZEOGD.9290", "type": "Feature", "geometry": ...
{"id": "BEZIRKSGRENZEOGD.9291", "type": "Feature", "geometry": ...
...

Balázs Bárány             Linuxwochen Wien 2019                   14 / 35
JSON-Dokumente in Spalten zerlegen

with features as (
    select jsonb_array_elements(content::jsonb->’features’) as features
    from http_get(’https://data.wien.gv.at/daten/geo?...&outputFormat=json’)
)
select cast(features->’properties’->>’BEZNR’ as integer) as beznr,
    features->’properties’->>’NAMEK’ as bezname,
    cast(features->’properties’->>’FLAECHE’ as numeric) as flaeche
from features
order by flaeche desc

beznr              bezname       flaeche
22                 Donaustadt    102299479.9377
21                 Floridsdorf   44443232.9003
13                 Hietzing      37714761.1255
Balázs Bárány                          Linuxwochen Wien 2019    15 / 35
Zusammenfassung: Erweiterungen

   I Neue Funktionalität in der Datenbank
   I Mit SQL-Syntax anwendbar
   I Volle PostgreSQL-Funktionalität
            I JSON-Verarbeitung
            I Window Functions
            I Trigger interagiert mit externen Daten

Balázs Bárány                            Linuxwochen Wien 2019   16 / 35
Zusammenfassung: Erweiterungen

   I Neue Funktionalität in der Datenbank
   I Mit SQL-Syntax anwendbar
   I Volle PostgreSQL-Funktionalität
            I JSON-Verarbeitung
            I Window Functions
            I Trigger interagiert mit externen Daten

   I Komplexität, größere Angriffsfläche
            I Autor über pgsql http: “Footgun”
   I Mit Ziel und Maß einsetzen!
            I Evt. Verwendung durch nichtprivilegierte User einschränken

Balázs Bárány                            Linuxwochen Wien 2019           16 / 35
Foreign Data Wrappers

   I SQL-Standard “Management of External Data”
            I PostgreSQL führend

Balázs Bárány                    Linuxwochen Wien 2019   17 / 35
Foreign Data Wrappers

   I SQL-Standard “Management of External Data”
            I PostgreSQL führend

   I Zugriff auf andere Datenbanken
            I Relational
            I NoSQL
            I Hadoop

Balázs Bárány                      Linuxwochen Wien 2019   17 / 35
Foreign Data Wrappers

   I SQL-Standard “Management of External Data”
            I PostgreSQL führend

   I Zugriff auf andere Datenbanken
            I Relational
            I NoSQL
            I Hadoop

   I Spezielle Dateiformate
   I Cloud-Anwendungen

Balázs Bárány                      Linuxwochen Wien 2019   17 / 35
postgres fdw

   I Mitgelieferte Extension
   I Zugriff auf andere PostgreSQL-Datenbanken
            I      Geografische Verteilung
            I      Optimierung für Einsatzbereiche
            I      Skalierung
            I      Archivdatenbank
            I      Datenintegration
            I      ...

create extension postgres_fdw;

Balázs Bárány                                 Linuxwochen Wien 2019   18 / 35
mysql fdw, oracle fdw, tds fdw (MSSQL), . . .

   I Zugriff auf andere Datenbanken
   I Lesend und schreibend
   I Unterschiedlicher Grad an Optimierung
            I Filter pushdown
            I Join pushdown
   I Datensynchronisierung mit Triggern
   I Aggregierung von Daten aus verschiedenen Quellen
   I Multicorn: Python-basierter “allgemeiner” FDW

Balázs Bárány                      Linuxwochen Wien 2019   19 / 35
NoSQL und Hadoop

   I ElasticSearch
   I Hive, Impala
   I BigQuery
   I MongoDB, CouchDB
   I Neo4J
   I ...

Balázs Bárány        Linuxwochen Wien 2019   20 / 35
NoSQL und Hadoop

   I ElasticSearch
   I Hive, Impala
   I BigQuery
   I MongoDB, CouchDB
   I Neo4J
   I ...

   I Richtige Abfragesprache statt proprietär/eingeschränkt
   I Auslagerung großer Datenmengen
   I Integration mit Standard-Tools
            I Berichtstools, OLAP

Balázs Bárány                      Linuxwochen Wien 2019     20 / 35
Protokolle und Webanwendungen

   I LDAP, IMAP, RSS, . . .
   I git, Telegram
   I geofdw: Geocoding und Reverse Geocoding
   I Twitter
   I Facebook
   I Google
   I Mailchimp
   I ...

Balázs Bárány                  Linuxwochen Wien 2019   21 / 35
Dateiformate

   I CSV
   I gzipped CSV
   I zip, tar
   I Dateisystem/Metadaten

Balázs Bárány             Linuxwochen Wien 2019   22 / 35
Dateiformate

   I CSV
   I gzipped CSV
   I zip, tar
   I Dateisystem/Metadaten

   I GDAL/OGR: allgemein verwendbares Geo-Konvertierprogramm
            I      ODBC, andere Datenbanken
            I      Shapefile, OpenStreetMap, . . .
            I      Excel und LibreOffice
            I      Geo-Webdienste
            I      Read/Write: Datenexport in verschiedene Formate

Balázs Bárány                               Linuxwochen Wien 2019   22 / 35
Gesamten Open-Data-Server “importieren”

CREATE SERVER ogd_wien_srv
  FOREIGN DATA WRAPPER ogr_fdw
  OPTIONS (
datasource ’WFS:https://data.wien.gv.at/daten/geo?service=WFS&request=GetFea
format ’WFS’
  );

create schema ogd_wien;
import foreign schema ogr_all from server ogd_wien_srv into ogd_wien;

NOTICE: Number of tables to be created 238
IMPORT FOREIGN SCHEMA

Balázs Bárány             Linuxwochen Wien 2019                 23 / 35
Ergebnis

                   Abbildung: Abfrage der Foreign-Tabelle (Daten: OpenStreetMap, OGD Wien)
Balázs Bárány                              Linuxwochen Wien 2019                          24 / 35
Anmerkungen

   I Metadaten wurden automatisch abgefragt

Balázs Bárány                  Linuxwochen Wien 2019   25 / 35
Anmerkungen

   I Metadaten wurden automatisch abgefragt

   I Foreign-Tabellen sind Verknüpfungen
            I Daten nicht statisch kopiert
            I Jedes SELECT holt die aktuellen Daten vom Server

Balázs Bárány                          Linuxwochen Wien 2019   25 / 35
Anmerkungen

   I Metadaten wurden automatisch abgefragt

   I Foreign-Tabellen sind Verknüpfungen
            I Daten nicht statisch kopiert
            I Jedes SELECT holt die aktuellen Daten vom Server
            I Wie Tabellen verwendbar

-- Foreign Tables direkt joinen
select bez.namek as bezirk, kh.bezeichnung as krankenhaus
from ogd_wien.ogdwien_bezirksgrenzeogd bez
inner join ogd_wien.ogdwien_krankenhausogd kh on kh.bezirk = bez.beznr;

Balázs Bárány                          Linuxwochen Wien 2019    25 / 35
Anmerkungen

   I Metadaten wurden automatisch abgefragt

   I Foreign-Tabellen sind Verknüpfungen
            I Daten nicht statisch kopiert
            I Jedes SELECT holt die aktuellen Daten vom Server
            I Wie Tabellen verwendbar

-- Foreign Tables direkt joinen
select bez.namek as bezirk, kh.bezeichnung as krankenhaus
from ogd_wien.ogdwien_bezirksgrenzeogd bez
inner join ogd_wien.ogdwien_krankenhausogd kh on kh.bezirk = bez.beznr;

   I Nochmal IMPORT FOREIGN SCHEMA, um neue Datenquellen zu holen

Balázs Bárány                          Linuxwochen Wien 2019     25 / 35
Nutzung von APIs

   I Mögliche Anwendungen
            I Datenimport periodisch, on demand, live

Balázs Bárány                           Linuxwochen Wien 2019   26 / 35
Nutzung von APIs

   I Mögliche Anwendungen
            I Datenimport periodisch, on demand, live
            I Aktionen mit Triggern auslösen
                   I Rechnung erstellt => Zahlungsprozess starten
                   I Datenanreicherung nach Datensatzänderung
                   I Geokodierung, Währungsumrechnung, . . .

Balázs Bárány                               Linuxwochen Wien 2019   26 / 35
Nutzung von APIs

   I Mögliche Anwendungen
            I Datenimport periodisch, on demand, live
            I Aktionen mit Triggern auslösen
                   I Rechnung erstellt => Zahlungsprozess starten
                   I Datenanreicherung nach Datensatzänderung
                   I Geokodierung, Währungsumrechnung, . . .
            I Export in fremde Anwendung mit API
                   I Newsletter-Anbieter, Webshop, . . .

Balázs Bárány                                Linuxwochen Wien 2019   26 / 35
Die Datenbank als API anbieten

PostgREST
   I Exportiert ein Schema einer Datenbank als API
   I Generiert Endpunkte automatisch

Balázs Bárány                    Linuxwochen Wien 2019   27 / 35
Die Datenbank als API anbieten

PostgREST
   I Exportiert ein Schema einer Datenbank als API
   I Generiert Endpunkte automatisch

   I Nutzt Datenbank-Zugriffsrechte
            I Keine doppelte Arbeit
            I Rechte an einer Stelle definiert

Balázs Bárány                             Linuxwochen Wien 2019   27 / 35
Die Datenbank als API anbieten

PostgREST
   I Exportiert ein Schema einer Datenbank als API
   I Generiert Endpunkte automatisch

   I Nutzt Datenbank-Zugriffsrechte
            I Keine doppelte Arbeit
            I Rechte an einer Stelle definiert

   I Lese- und auf Wunsch auch Schreibzugriff
            I Stored Procedures als Endpunkt definierbar

Balázs Bárány                             Linuxwochen Wien 2019   27 / 35
Die Datenbank als API anbieten

PostgREST
   I Exportiert ein Schema einer Datenbank als API
   I Generiert Endpunkte automatisch

   I Nutzt Datenbank-Zugriffsrechte
            I Keine doppelte Arbeit
            I Rechte an einer Stelle definiert

   I Lese- und auf Wunsch auch Schreibzugriff
            I Stored Procedures als Endpunkt definierbar

   I Wie SQL: deklarativ statt programmiert

Balázs Bárány                             Linuxwochen Wien 2019   27 / 35
Vorgehensweise - Lesbare API

   I Schema api anlegen (Name beliebig)
   I Rolle api anon anlegen (Name beliebig)

Balázs Bárány                    Linuxwochen Wien 2019   28 / 35
Vorgehensweise - Lesbare API

   I Schema api anlegen (Name beliebig)
   I Rolle api anon anlegen (Name beliebig)

   I USAGE-Rechte am Schema vergeben
            I Alle anderen Rechte widerrufen

Balázs Bárány                           Linuxwochen Wien 2019   28 / 35
Vorgehensweise - Lesbare API

   I Schema api anlegen (Name beliebig)
   I Rolle api anon anlegen (Name beliebig)

   I USAGE-Rechte am Schema vergeben
            I Alle anderen Rechte widerrufen

   I Views anlegen, die als lesbare API-Endpunkte dienen sollen
            I Leserecht für api anon an der View

Balázs Bárány                            Linuxwochen Wien 2019   28 / 35
Lesezugriff über die API

$ curl http://localhost:3000/bezirk | jq .
[
  {
    "FID": "BEZIRKSGRENZEOGD.9290",
...
    "SE_ANNO_CAD_DATA": null
  }
]

$ curl ’http://localhost:3000/bezirk?select=BEZNR,NAMEK&order=BEZNR’
[{"BEZNR":1,"NAMEK":"Innere Stadt"},
 {"BEZNR":2,"NAMEK":"Leopoldstadt"},
...]

Balázs Bárány             Linuxwochen Wien 2019                 29 / 35
Filterkriterien

$ curl ’http://localhost:3000/bezirk?
    select=BEZNR,NAMEK,FLAECHE&order=FLAECHE.desc&FLAECHE=gt.10000000’
[{"BEZNR":22,"NAMEK":"Donaustadt","FLAECHE":102299479.94},
 {"BEZNR":21,"NAMEK":"Floridsdorf","FLAECHE":44443232.90},
 {"BEZNR":13,"NAMEK":"Hietzing","FLAECHE":37714761.13},
...]

Balázs Bárány             Linuxwochen Wien 2019                 30 / 35
Ausgabe anpassen

# CSV-Output
$ curl --header ’Accept: text/csv’ \
    ’http://localhost:3000/bezirk?select=BEZNR,NAMEK,FLAECHE&order=BEZNR’
BEZNR,NAMEK,FLAECHE
1,"Innere Stadt",2868773.82
2,Leopoldstadt,19241995.82
...

# Nur die ersten drei Zeilen
$ curl --header ’Accept: text/csv’ \
    ’http://localhost:3000/bezirk?select=NAMEK&order=BEZNR&limit=3’ \
    | wc -l
3

Balázs Bárány             Linuxwochen Wien 2019                 31 / 35
Hinweise

   I Syntax nicht sehr API-like
   I Auflistung der Objekte

Balázs Bárány                  Linuxwochen Wien 2019   32 / 35
Hinweise

   I Syntax nicht sehr API-like
   I Auflistung der Objekte

   I Empfehlung: Apache mit HTTPS, mod proxy / mod rewrite
            I Auch für die Sicherheit besser
            I PostgREST und Datenbank hinter Firewall
            I Einschränkung von Abfragen (z. B. Abfrage nur mit id=)

Balázs Bárány                           Linuxwochen Wien 2019        32 / 35
Hinweise

   I Syntax nicht sehr API-like
   I Auflistung der Objekte

   I Empfehlung: Apache mit HTTPS, mod proxy / mod rewrite
            I Auch für die Sicherheit besser
            I PostgREST und Datenbank hinter Firewall
            I Einschränkung von Abfragen (z. B. Abfrage nur mit id=)

ProxyPass "/api/" "http://db:3000/"
ProxyPassReverse /api/ http://db:3000/

# URLs der Form /api/bezirk/1 zur PostgREST-Syntax umschreiben
RewriteRule "/api/bezirk/([0-9]+)$" "http://db:3000/bezirk?BEZNR=eq.$1" [P]

Balázs Bárány                           Linuxwochen Wien 2019        32 / 35
Tutorial für Schreiben

Siehe https://postgrest.org/en/v5.2/tutorials/tut1.html

# INSERT
curl http://localhost:3000/todos -X POST \
     -H "Content-Type: application/json" \
     -d ’{"task": "learn how to write"}’

# UPDATE auf einen Datensatz
curl http://localhost:3000/todos?task=eq.finish+tutorial+0 \
     -X PATCH \
     -H "Content-Type: application/json" \
     -d ’{"done": true}’

Balázs Bárány              Linuxwochen Wien 2019            33 / 35
DELETE

# Noch kein DELETE-Recht auf die Tabelle für api_anon
$ curl http://localhost:3000/todos?task=eq.finish+tutorial+0 \
    -X DELETE
{"hint":null,"details":null,"code":"42501",
 "message":"permission denied for table todos"}

# GRANT DELETE ON api.todos TO api_anon;
$ curl http://localhost:3000/todos?task=eq.finish+tutorial+0 -X DELETE
$ curl http://localhost:3000/todos
[{"id":2,"done":false,"task":"pat self on back","due":null},
 {"id":3,"done":false,"task":"learn how to write","due":null}]

Balázs Bárány             Linuxwochen Wien 2019                 34 / 35
Fertig!

   I Quellen
            I PostgreSQL-Dokumentation
              https://postgresql.org/docs/11/
            I Modern SQL
              https://modern-sql.com/
   I Kontakt
            I Balázs Bárány balazs@datascientist.at

                                         Fragen?

Balázs Bárány                          Linuxwochen Wien 2019   35 / 35
Sie können auch lesen