einige Benutzerabfragen für PostgreSQL Datenbank

  • Ich bin von MySQL auf PostgreSQL umgestiegen, da ich festgestellt habe, dass die Abfragen damit (zumindest in meiner Umgebung) deutlich schneller sind.
    Manche Benutzerabfragen musste ich jedoch anpassen, da PostgreSQL keine automatische Typumwandlung durchführt und man mit CAST() arbeiten muss.
    Vielleicht sind die hier aufgelisteten Abfragen für jemanden nützlich.


    Bilder ohne GPS-Koordinaten (MySQL und PostgreSQL)

    SQL
    1. SELECT * FROM bilder WHERE latitude = '000:00:0000:0' AND longitude = '000:00:0000:0';

    Dasselbe, aber nur für Bilder in Unterverzeichnissen, deren Name mit "20" beginnt:

    Code
    1. select b.* from bilder b, filme f where (latitude = '000:00:0000:0' AND longitude = '000:00:0000:0') and b.film = f.ukey and f.caption like '20%';

    Bilder ohne Ortsangabe (MySQL und PostgreSQL)

    SQL
    1. SELECT * FROM bilder WHERE land = '-';

    Bilder nach Blende (PostgreSQL)

    Code
    1. select * from bilder where CAST(blende AS REAL) BETWEEN @text;min. Blendenzahl@ and @text;max. Blendenzahl@

    Bilder nach Brennweite (PostgreSQL)

    Code
    1. select * from bilder where CAST (brennweite AS INTEGER) BETWEEN @text;Brennweite Von@ AND @text;Brennweite Bis@

    Bilder nach Brennweite - äquivalent 35mm (PostgreSQL)

    SQL
    1. SELECT b.* FROM bilder b, exifdata xWHERE b.ukey = x.bild AND x.tag = 'focallengthin35mmfilm' AND CAST(data AS INTEGER) BETWEEN '@text;Min. Brennweitet@' AND '@text;Max. Brennweite@';

    Bilder nach ISO (PostgreSQL)

    SQL
    1. SELECT b.* FROM bilder b, exifdata xWHERE b.ukey = x.bild AND x.tag = 'isospeedratings' AND CAST(data AS INTEGER) BETWEEN '@text;Iso-Minimalwert@' AND '@text;Iso-Maximalwert@';

    Suche nach Bildformaten


    Landscape (PostgreSQL)

    Code
    1. select * from bilder where cast(width as REAL) / cast(height as REAL) > 1.0;

    Portrait (PostgreSQL)

    Code
    1. select * from bilder where cast(height as REAL) / cast(width as REAL) > 1.0;

    Panorama - Verhältnis von Breite zu Höhe mindestens 1:1.95 (PostgreSQL)

    Code
    1. select * from bilder where (cast(width as REAL) / cast(height as REAL)) > 1.95;

    360°x180° - Panorama (PostgreSQL)

    Code
    1. select * from bilder where
    2. (cast(width as REAL) / cast(height as REAL)) BETWEEN 1.98 AND 2.02;

    Diese Abfrage kann auch Bilder anzeigen, welche keine Kugelpanoramen sind, wenn die Abmessungen zufällig auch das Verhältnis Breite:Höhe = 2:1 entspricht.
    Da das Verhältnis meist nicht pixelgenau ganz exakt 2:1 beträgt, wird eine Toleranz von +/- 2% berücksichtigt.


    Ernst