%Schriftgröße, Layout, Papierformat, Art des Dokumentes
%\documentclass[10pt,oneside,a4paper]{scrartcl}
\documentclass[10pt,oneside,a4paper,headsepline,footsepline]{scrartcl}

%Einstellungen der Seitenränder
\usepackage[left=2cm,right=2cm,top=1.5cm,bottom=1.5cm,includeheadfoot]{geometry}

%neue Rechtschreibung
\usepackage[ngerman]{babel}

%Umlaute ermöglichen
\usepackage[utf8]{inputenc}

%Gesamtseitenzahl
\usepackage{lastpage}

% Kopf- und Fußzeile
% Funktioniert nicht \usepackage[automark]{scrpage2}%
\usepackage[automark]{scrlayer-scrpage}


%Quellcode-Listings
\usepackage{listings}

% Hyperlinks
\usepackage{hyperref}

% Bilder
\usepackage{graphicx}

% Single quotes
\usepackage{upquote,textcomp}

%Kopfzeile
\ihead{Datenbanken}
\chead{}
\ohead{https://kohnlehome.de/datenbanken/postgresql.pdf}
%\setheadsepline{0.5pt}

%Fußzeile
%\setfootsepline{0.5pt}
\ifoot{Franz Kohnle}
\cfoot{Seite \thepage\ von  \pageref{LastPage}}
\ofoot{\today}

\pagestyle{scrheadings}

\begin{document}

% Überschrift 
\begin{center}
  \LARGE % Schriftgröße
  \bfseries % Fettdruck
  \sffamily % Serifenlose Schrift
  PostgreSQL
\end{center}

\section*{PostgreSQL nutzen}
\subsection*{Als Benutzer postgres anmelden}
\begin{verbatim}
sudo -i -u postgres 
\end{verbatim}

\subsection*{Client starten}
\begin{verbatim}
psql
\end{verbatim}

\subsection*{Verschiedene Kommandos}
\begin{verbatim}
\l                         # Datenbanken anzeigen
CREATE DATABASE <name>     # Datenbank erstellen
\c <name>                  # Datenbank auswählen
\dt                        # Tabellen anzeigen
\d <tabelle>               # Informationen über <tabelle>
\end{verbatim}

\subsection*{Client beenden}
\begin{verbatim}
\q
\end{verbatim}



\section*{Datentyp: JSON / JSONB}
\subsection*{Tabelle erstellen}
\begin{verbatim}
CREATE TABLE tabelle (id INT, person JSONB);
\end{verbatim}

\subsection*{Datensätze erstellen}
\begin{verbatim}
INSERT INTO
  tabelle (id, person) 
VALUES
  (1, '{"vorname": "Anna",  "age": 19}'),
  (2, '{"vorname": "Berta", "age": 17}');
\end{verbatim}

\subsection*{Auf JSON-Object-Field zugreifen}
\subsubsection*{spalte  $->$  'attribut'}
Gibt attribut als JSON zurück

\subsubsection*{spalte  $->>$  'attribut'}
Gibt attribut als Text zurück

\subsubsection*{Beispiel}
\begin{verbatim}
SELECT
  person ->> 'vorname' as Vorname
FROM
  tabelle 
WHERE
  (person ->> 'age')::int > 18;
\end{verbatim}

\end{document}
