Inhaltsverzeichnis
SQLite
Einrichtung
Test-Datenbank mit einer Test-Tabelle anlegen
#!/usr/bin/env bash sqlite3 test.db "create table test (id int primary key, name text)" sqlite3 test.db "insert into test values (1, \"Fritz\")" sqlite3 test.db "select * from test"
hier ist wichtig, dass alles klein geschrieben wird und das am Ende der Zeile kein Semikolon steht, wie es bei SQL üblicherweise sein soll:
> echo ".databases" | sqlite3 test.db > echo ".tables" | sqlite3 test.db
Abfragebeispiel über zwei Tabellen:
echo "
SELECT
Spalte1,
strftime('%w',datum),
Spalte3
FROM
${TABELLE1},
${TABELLE2}
WHERE
netz1=netz2
AND id1=id2
AND DATUM
BETWEEN date('now','start of month','-1 month','-0 day')
AND date('now','start of month','+0 month','-1 day')
GROUP BY 1, 2
ORDER BY 1, 2 DESC, 1
LIMIT 10
;
" | ${DBPROG} ${DBDATEI} > ${DATEN}
Das Semikolon am Ende eines SQL-Aufrufes ist sehr wichtig!
eine Pipe-separierte Datei mit höchstgeschwindigkeit einlesen
echo "
.import ${DATEN} ${TABELLE1}
.separator |
PRAGMA synchronous = 0;
" | ${DBPROG} ${DBDATEI}
Syntax
# echo "SELECT * FROM sqlite_master;" | sqlite /var/lib/csync2/rechnername.db table|file|file|4|CREATE TABLE file ( filename, checktxt, UNIQUE ( filename ) ON CONFLICT REPLACE) index|(file autoindex 1)|file|3| table|dirty|dirty|6|CREATE TABLE dirty ( filename, force, myname, peername, UNIQUE ( filename, peername ) ON CONFLICT IGNORE) index|(dirty autoindex 1)|dirty|5| table|hint|hint|8|CREATE TABLE hint ( filename, recursive, UNIQUE ( filename, recursive ) ON CONFLICT IGNORE) index|(hint autoindex 1)|hint|7| table|action|action|10|CREATE TABLE action ( filename, command, logfile, UNIQUE ( filename, command ) ON CONFLICT IGNORE) index|(action autoindex 1)|action|9| table|x509_cert|x509_cert|12|CREATE TABLE x509_cert ( peername, certdata, UNIQUE ( peername ) ON CONFLICT IGNORE) index|(x509_cert autoindex 1)|x509_cert|11|
alle Datenbanken anzeigen:
# echo ".databases" | sqlite /var/lib/csync2/rechnername.db seq name file --- --------------- ---------------------------------------------------------- 0 main /var/lib/csync2/rechnername.db 1 temp /var/tmp/sqlite_gQiSCgZmz70zacs
alle Tabellen anzeigen:
# echo ".tables" | sqlite /var/lib/csync2/rechnername.db action dirty file hint x509_cert
Tabellen mit dem Zeichen "i" im Namen anzeigen:
# echo ".tables i" | sqlite /var/lib/csync2/rechnername.db action dirty file hint
Ausgabeformate
spaltenweise:
# echo -e ".mode column\nSELECT * FROM dirty;" | sqlite /var/lib/csync2/rechnername.db /etc/ha.d/resource.d/csync2 1 store01 store02 /etc/hosts 1 store01 store02 /etc/vblade.conf 0 store01 store02
Die normale Spaltenbreite sind 10 Zeichen, Inhalte die länger sind, werden abgeschnitten. Man kann die Spaltenbreite aber auch verändern, in diesem Beispiel wird die Breite der ersten Spalte auf "30" Zeichen und die der zweiten Spalte auf "3" Zeichen gesetzt. Alle weiteren Spalten bleiben unverändert:
# echo -e ".mode column\n.width 30 3\nSELECT * FROM dirty;" | sqlite /var/lib/csync2/ /etc/ha.d/resource.d/csync2 1 store01 store02 /etc/hosts 1 store01 store02 /etc/vblade.conf 0 store01 store02
als Liste:
# echo -e ".mode list\nSELECT * FROM dirty;" | sqlite /var/lib/csync2/rechnername.db /etc/ha.d/resource.d/csync2|1|store01|store02 /etc/hosts|1|store01|store02 /etc/vblade.conf|0|store01|store02
zeilenweise
# echo -e ".mode line\nSELECT * FROM dirty;" | sqlite /var/lib/csync2/rechnername.db filename = /etc/ha.d/resource.d/csync2 force = 1 myname = store01 peername = store02 filename = /etc/hosts force = 1 myname = store01 peername = store02 filename = /etc/vblade.conf force = 0 myname = store01 peername = store02
spezielles Trennzeichen:
# echo -e ".separator ', '\nSELECT * FROM dirty;" | sqlite /var/lib/csync2/rechnername.db /etc/ha.d/resource.d/csync2, 1, store01, store02 /etc/hosts, 1, store01, store02 /etc/vblade.conf, 0, store01, store02
