NULL Tupel in Postgresql Anzeigen

Ich habe mich in den letzten Wochen immer wieder aufgeregt, dass PostgreSQL NULL-Tupel auf der Konsole nicht anzeigt bzw. man kann NULL: postgres=# SELECT NULL AS "<null>", '' AS "empty string"; <null> | empty string --------+-------------- | (1 row) Man kann mittel \pset die NULL-Tupel auch explizit anzeigen: postgres=# \pset null '<null>' Null display is "<null>". postgres=# SELECT NULL AS "<null>", '' AS "empty string"; <null> | empty string --------+-------------- <null> | (1 row) postgres=#

Unique Index mit PostgreSQL

Das ist wieder ein Beitrag zum Thema: Ich lerne PostgreSQL. Wobei (fast) alle relationalen Datenbanken das Verhalten haben, welches ich beschreibe. Man kann ein Unique Index über mehrere Spalten von einer Tabelle definieren, dann sichergestellt, dass es keine doppelten Tupel gibt. UNIQUE Causes the system to check for duplicate values in the table when the index is created (if data already exist) and each time data is added. Attempts to insert or update data which would result in duplicate entries will generate an error. [weiter lesen...]

DISTINCT in PostgreSQL

Ich habe sehr lange ausschließlich MySQL benutzt. Mein Chef bei busnetworx, wollte unbedingt PostgreSQL einsetzten. Aus diesem Grund habe ich mir PostgreSQL genauer angesehen. Das Schlüsselwort DISTINCT ist in PostgreSQL mächtiger als in MySQL und ich möchte es im einmal erklären. SELECT DISTINCT Ich habe eine einfache Mitarbeitertabelle angelegt, wie man sie in vielen Tutorials findet. Die Testdaten habe ich mit mockaroo generiert. test=# \d employee Table "public.employee" Column | Type | Modifiers ------------+-----------------------+------------------------------------------------------- id | integer | not null default nextval('employee_id_seq'::regclass) first_name | character varying(50) | name | character varying(50) | department | character varying(50) | salary | integer | Indexes: "employee_pkey" PRIMARY KEY, btree (id) test=# SELECT * FROM employee limit 3; id | first_name | name | department | salary ----+------------+---------+-------------+-------- 1 | Francklin | Gurr | Services | 4207 2 | Cecily | Churm | Engineering | 3728 3 | King | Tribell | Training | 3780 (3 rows) Was macht DISTINCT SELECT DISTINCT entfernt Duplikate aus der Ergebnismenge. [weiter lesen...]

Docker aufräumen

Wenn man Docker nutzt, wird man über kurz oder lang seine Festplatte voll bekommen. Das liegt daran, dass Docker keine alten (unbenutzten) Images automatisch löscht. Man kann diese Images per Hand löschen, das ist aber sehr nervig. Das Tool docker-gc gibt es schon recht lange, mit ihm kann man recht konfortabel aufräumen. In Docker 1.13 wurde das Unterkomando system eingeführt. Damit kann man sich den verbrauchten Plattenplatz übersichtlich anzeigen lassen und aufräumen. [weiter lesen...]

Repository zu Github spiegeln

Bei Github gibt es leider keine Möglichkeit, dass man fremde git-Repositories spiegeln kann. Das hat zur Folge, dass man von Github aus spiegelt oder man muss zu Github pushen. Es gibt verschiedene Gründe, weswegen man Github nicht als das zentrale Repository nehmen möchte. Also muss man die Änderungen aktiv zu Github schieben. Zusätzlicher Remote Die offensichtlichste Möglichkeit ist, dass man eine zusätzlichen Remote hinzufügt. git remote add github <github repo URL> git push github Man muss aber immer daran denken, dass man auch zu Github pushen muss. [weiter lesen...]

Multi-Stage-Build mit Docker

Wenn man Docker nutzt, möchte man gerne kleine Images haben. Durch die Nutzung von kleineren Images spart man Netzwerklast beim PUSH und PULL. Ein weiterer offensichtlicher Vorteil ist das Sparen von Festplattenplatz. Ein kleines Image kann auch sicherer sein, da der mögliche Angriffsvektor kleiner wird, wenn man keine zusätzlichen Tools, Compiler oder Laufzeitumgebungen im Image hat. Bis jetzt war es realtiv schwierig kleine Images mit Docker zu bauen. Da es nicht möglich ist, ein einmal erzeugten Layer wieder los zu werden. [weiter lesen...]

map Files mit HAProxy

In meinen Beitrag Loadbalancer und Webserver härten habe ich map Files in HAProxy verwendet, um die Konfiguration zu vereinfachen. Normalerweise arbeitet HAProxy weiter, wenn ein use_backend keine Anwendung findet, da man dazu in der Regel eine entsprechende ACL definiert. Wenn man mehrere map Files verwendet und diese sollen nacheinander ausgewertet werden, z.B. zuerst möchte man nach Pfaden routen und dann nach Hostnamen, dann muss man auch ACLs definieren. Falls man keine ACL und kein Default-Backend bei der map-Funktion angibt, wird auch Default-Backend ignoriert, welches mit default_backend konfiguriert wird. [weiter lesen...]

ccache

Ich habe heute mit 2 Bekannten über den Beitrag Kernel bauen gesprochen und wir sind auf das Thema ccache gekommen. Sie konnten meine Aussage nicht nachvollziehen, dass ich ccache nutze. Einer nutzt ccache nicht, weil er auf seinen System keinen (merkbaren) Geschwindigkeitsvorteil hat. Eine weitere Meinung ist, die nicht von der Hand zu weisen ist, die Wahrscheinlichkeit für Compilerfehler steigt, weil ccache auch Bugs haben kann und ggf. das falsche ausliefert. [weiter lesen...]

Loadbalancer und Webserver härten

Im Artikel Cracking the Lens: Targeting HTTP’s Hidden Attack-Surface wird unter anderem gezeigt, welche Auswirkungen nicht valider Host-Header auf die eigene Infrastruktur haben können. Man kann sich vor derartigen Angriffen relativ leicht schützen. Als erstes muss man entscheiden, ob man pfad- oder hostbasiert Routingentscheidungen trifft. Man sollte pro Loadbalancer/Reverseproxy/Webserver nur ein Unterscheidungsmerkmal nutzen. Wenn man beides zulässt, dann muss festlegen und auch sicherstellen, dass z.B. immer zuerst der Pfad /. [weiter lesen...]

Let's Encrypt mit ECC

Wenn man nichts angibt, dann generiert der Let’s Encrypt-Client einen RSA Schüssel, welcher von Let’s Encrypt signiert wird. Die RSA Schlüssel sind in der Regel 2048 Bit lang. Man kann auch längere Schlüssel generieren, diese erhöhen die Sicherheit. Es ist auch möglich ECC für Zertifikate zu nutzen. Der offensichtlichtlichste Vorteil ist, dass ECC Schlüssel viel kürzer als RSA Schlüssel sind - bei einem gleichwertigen Sicherheitsnivieau. Auf leistungsschwachen Geräten ist ECC, in meinen Augen, auch schneller als RSA. [weiter lesen...]