Mehr

Werte in Postgresql in Java einfügen

Werte in Postgresql in Java einfügen


Ich versuche, die gleichen Werte in meine Tabelle einzufügen und schreibe diesen Code:

String sql = "INSERT INTO points (gid, osm_id, name, type, geom) VALUES (?, ?, ?, ?,ST_GeomFromText('POINT(?, ?)', 2100));"; pst = con.prepareStatement(sql); pst.setInt(1, 40001); pst.setInt(2, 2); pst.setString(3, "Allgemein"); pst.setString(4, "Heller"); pst.setDouble(5, 69,6); pst.setDouble(6, 80.3); pst.executeUpdate();

Aber zeig mir eine Ausnahme

org.postgresql.util.PSQLException: Der Spaltenindex liegt außerhalb des gültigen Bereichs: 5, Anzahl der Spalten: 4.

Wenn mir jemand helfen kann.

Gelöst mit:

pst.setString(5,"POINT("+lat+" "+log+")" );

"INSERT INTO points (gid, osm_id, name, type, geom)VALUES (?, ?, ?, ?,ST_GeomFromText(?, 2100));"

Dies:

'PUNKT(?, ?)'

befindet sich in einer Literalzeichenfolge, sodass Platzhalter nicht interpretiert werden.

Sie müssen stattdessen die Platzhalter außerhalb eines Literals lassen und die Verkettung oder die Funktionsaufrufsyntax verwenden.

In diesem Fall gibt es tatsächlich aPunkt(x,y)Funktion, also kannst du einfach schreiben:

PUNKT(?,?)

ohne die einfachen Anführungszeichen, aber wenn dies nicht der Fall wäre und Sie einen Wert erstellen müssten, würden Sie stattdessen verketten:

'PUNKT('||?||','||?||')'

oder ersetze das Ganze durch einen einzigen Parameter:

?

und sende die ZeichenfolgePUNKT (bla,bla), clientseitig zusammengesetzt, zum Server.


Dies ist in etwa die gleiche Antwort wie diese, außer dass sie etwas mehr an Ihre Situation angepasst ist. Grundsätzlich mischen Sie SQL-Parameter in WKT. Da Sie über numerische Daten verfügen, sollten Sie sowieso kein WKT erstellen und stattdessen direkt darauf hinweisen.

String sql = "INSERT INTO points (gid, osm_id, name, type, geom)" + "VALUES (?, ?, ?, ?, ST_SetSRID(ST_MakePoint(?, ?), 2100));"; pst = con.prepareStatement(sql); pst.setInt(1, 40001); pst.setInt(2, 2); pst.setString(3, "Allgemein"); pst.setString(4, "Heller"); pst.setDouble(5, 69,6); // Längengrad pst.setDouble(6, 80.3); // Breite pst.executeUpdate();

Auch wenn IhrgidSpalte ein serieller Typ ist, sollten Sie sie hier entfernen und von der Datenbank zuweisen lassen.


Merkmale

Funktionen

Funktionen ermöglichen die Ausführung von Codeblöcken durch den Server. Obwohl diese Blöcke in SQL geschrieben werden können, hat das Fehlen grundlegender Programmieroperationen, die vor Version 8.4 existierten, wie Verzweigungen und Schleifen, die Einführung anderer Sprachen innerhalb von Funktionen vorangetrieben. Einige der Sprachen können sogar innerhalb von Triggern ausgeführt werden. Funktionen in PostgreSQL können in den folgenden Sprachen geschrieben werden:

  • Eine eingebaute Sprache namens PL/pgSQL ähnelt der Prozedursprache PL/SQL von Oracle.
  • Skriptsprachen werden durch PL/Lua, PL/LOLCODE, PL/Perl, plPHP, PL/Python, PL/Ruby, PL/sh, PL/Tcl und PL/Scheme unterstützt.
  • Kompilierte Sprachen C, C++, Java (über PL/Java)
  • Die statistische Sprache R bis PL/R.

PostgreSQL unterstützt Zeilenrückgabefunktionen, bei denen die Ausgabe der Funktion eine Reihe von Werten ist, die in Abfragen ähnlich wie eine Tabelle behandelt werden können. Benutzerdefinierte Aggregate und Fensterfunktionen können ebenfalls definiert werden.

Funktionen können so definiert werden, dass sie mit den Rechten des Aufrufers oder des Benutzers, der die Funktion definiert hat, ausgeführt werden. Funktionen werden manchmal als . bezeichnet Gespeicherte Prozeduren, obwohl es einen leichten technischen Unterschied zwischen den beiden gibt.

Indizes

PostgreSQL enthält integrierte Unterstützung für B+-Baum, Hash-Tabellen, GiST- und GiN-Indizes. Außerdem können benutzerdefinierte Indexmethoden erstellt werden, obwohl dies ein ziemlich aufwendiger Prozess ist. Indizes in PostgreSQL unterstützen auch die folgenden Funktionen:

  • Ausdrucksindizes kann mit einem Index des Ergebnisses eines Ausdrucks oder einer Funktion erstellt werden, anstatt einfach dem Wert einer Spalte.
  • Teilindizes, die nur einen Teil einer Tabelle indizieren, können erstellt werden, indem eine WHERE-Klausel am Ende der CREATE INDEX-Anweisung hinzugefügt wird. Dadurch kann ein kleinerer Index erstellt werden.
  • Der Planer ist in der Lage, mehrere Indizes zusammen zu verwenden, um komplexe Abfragen zu erfüllen, indem er temporäre In-Memory-Bitmap-Indexoperationen verwendet.

Löst aus

Trigger sind Ereignisse, die durch die Aktion von SQL-DML-Anweisungen ausgelöst werden. Beispielsweise kann eine INSERT-Anweisung einen Trigger aktivieren, der überprüft, ob die Werte der Anweisung gültig sind. Die meisten Trigger werden nur durch INSERT- oder UPDATE-Anweisungen aktiviert.

Datenbank-Trigger werden vollständig unterstützt und können an Tabellen, aber nicht an Ansichten angehängt werden. Ansichten können jedoch Regeln haben. Mehrere Trigger werden in alphabetischer Reihenfolge ausgelöst. Zusätzlich zum Aufrufen von Funktionen, die in nativem PL/PgSQL geschrieben sind, können Trigger auch Funktionen aufrufen, die in anderen Sprachen wie PL/Perl geschrieben sind.

PostgreSQL verwaltet die Parallelität über ein System, das als Multi-Version Concurrency Control (MVCC) bekannt ist und jedem Benutzer einen "Schnappschuss" der Datenbank gibt, sodass Änderungen vorgenommen werden können, ohne für andere Benutzer sichtbar zu sein, bis eine Transaktion festgeschrieben ist. Dies macht Lesesperren weitgehend überflüssig und stellt sicher, dass die Datenbank die ACID-Prinzipien auf effiziente Weise einhält.

Regeln

Regeln ermöglichen das Umschreiben des "Abfragebaums" einer eingehenden Abfrage. Eine häufige Verwendung ist die Implementierung von Ansichten, einschließlich aktualisierbarer Ansichten. Regeln, oder genauer "Abfrage-Neuschreibregeln", werden an eine Tabelle/Klasse angehängt und "Neuschreiben" der eingehenden DML (wählen, einfügen, aktualisieren und/oder löschen) in eine oder mehrere Abfragen, die entweder ersetzen die ursprüngliche DML-Anweisung oder führen Sie sie zusätzlich aus. Das erneute Schreiben von Abfragen erfolgt nach dem Parsen von DML-Anweisungen, jedoch vor der Abfrageplanung.

Datentypen

Es wird eine Vielzahl von nativen Datentypen unterstützt, darunter:

  • Arrays mit variabler Länge (einschließlich Text- und Composite-Typen) bis zu 1 GB Gesamtspeichergröße.
  • Zahlen mit beliebiger Genauigkeit
  • Geometrische Primitive
  • IPv4- und IPv6-Adressen
  • CIDR-Blöcke und MAC-Adressen
  • XML-unterstützende Xpath-Abfragen (ab 8.3)
  • UUID (ab 8.3)

Darüber hinaus können Benutzer ihre eigenen Datentypen erstellen, die in der Regel über die GiST-Infrastruktur von PostgreSQL vollständig indiziert werden können. Beispiele hierfür sind die Datentypen des geografischen Informationssystems (GIS) aus dem PostGIS-Projekt für PostgreSQL.

Benutzerdefinierte Objekte

Neue Typen von fast allen Objekten innerhalb der Datenbank können erstellt werden, einschließlich:

  • Besetzungen
  • Konvertierungen
  • Datentypen
  • Domänen
  • Funktionen, einschließlich Aggregatfunktionen
  • Indizes
  • Operatoren (bestehende können überladen werden)
  • Verfahrenssprachen

Nachlass

Tabellen können so eingestellt werden, dass sie ihre Eigenschaften von einer "übergeordneten" Tabelle erben. Daten in untergeordneten Tabellen scheinen in den übergeordneten Tabellen vorhanden zu sein, es sei denn, Daten werden mit dem Schlüsselwort ONLY aus der übergeordneten Tabelle ausgewählt, d. h. wählen Sie * aus ONLY PARENT_TABLE. Wenn Sie eine Spalte in der übergeordneten Tabelle hinzufügen, wird diese Spalte in der untergeordneten Tabelle angezeigt.

Die Vererbung kann verwendet werden, um die Tabellenpartitionierung zu implementieren, indem entweder Trigger oder Regeln verwendet werden, um Einfügungen in die übergeordnete Tabelle in die richtigen untergeordneten Tabellen zu leiten.

Diese Funktion wird noch nicht vollständig unterstützt – insbesondere sind Tabelleneinschränkungen derzeit nicht vererbbar. Ab Release 8.4 werden alle Check-Constraints und Not-Null-Constraints einer Elterntabelle automatisch von ihren Kindern geerbt. Andere Arten von Einschränkungen (Eindeutigkeits-, Primärschlüssel- und Fremdschlüsseleinschränkungen) werden nicht vererbt.

Die Vererbung bietet eine Möglichkeit, die Funktionen von Generalisierungshierarchien, die in Entity-Relationship-Diagrammen (ERD) dargestellt sind, direkt in die PostgreSQL-Datenbank abzubilden.

Andere Eigenschaften

    Einschränkungen einschließlich Fremdschlüsseleinschränkungen, Spalteneinschränkungen und Zeilenprüfungen . Obwohl Ansichten standardmäßig nicht aktualisierbar sind, können sie dies durch Erstellen von "Einfügen", "Aktualisieren" und/oder "Löschen" von Abfrage-Neuschreibregeln für die Ansicht erfolgen.
  • Innere, äußere (vollständige, linke und rechte) und Kreuzverbindungen
  • Unterauswahl
    • Korrelierte Unterabfragen [5]

    Add-ons

    • Leistungsassistent - in jedem Postgres-Download von EnterpriseDB enthalten. Quellcode ebenfalls verfügbar.
    • MySQL-Migrationsassistent – ​​in jedem Postgres-Download von EnterpriseDB enthalten. Quellcode ebenfalls verfügbar.
    • Geographische Objekte über PostGIS. GPL.
    • Shortest-Path-Algorithmen mit pgRouting mit PostGIS. GPL. über Tsearch2 und OpenFTS. (Ab Version 8.3 ist Tsearch2 im Kern von PostgreSQL enthalten)
    • Es gibt einige synchrone Multi-Master-Derivate oder Erweiterungen, einschließlich
        (gleiche Lizenz wie PostgreSQL) (in frühen Entwicklungsstadien)
      • . verfügbar für eine Reihe von anderen Servern außer PostgreSQL.
  • Proprietär

    Eine Reihe von Unternehmen bietet proprietäre Tools für PostgreSQL an. Sie bestehen oft aus einem universellen Kern, der für verschiedene spezifische Datenbankprodukte angepasst ist. Diese Tools teilen sich größtenteils die Verwaltungsfunktionen mit den Open-Source-Tools, bieten jedoch Verbesserungen bei der Datenmodellierung, beim Importieren, Exportieren oder Berichten.


    Funktion mit UPSERT in Postgres 9.5 oder höher

    Erstellen Sie einen benutzerdefinierten Zeilentyp für die Parameterübergabe. Wir könnten darauf verzichten, aber es ist einfacher:

    Schnell und grundsolide für Umgebungen mit gleichzeitigen Transaktionen.

    Zusätzlich zu den obigen Abfragen bietet diese Funktion .

    . wendet SELECT oder INSERT auf foo an: Jeder Typ, der noch nicht in der FK-Tabelle existiert, wird eingefügt. Vorausgesetzt, die meisten Typen existieren bereits.

    . wendet INSERT oder UPDATE (wahr "UPSERT") auf bar an: Wenn die Beschreibung bereits existiert, wird ihr Typ aktualisiert - aber nur, wenn sie sich tatsächlich ändert. Sehen:

    . übergibt Werte als bekannte Zeilentypen mit einem VARIADIC-Funktionsparameter. Beachten Sie das voreingestellte Maximum von 100 Funktionsparametern! Sehen:


    Unser Blog

    Bereits 2005 habe ich die ON_ERROR_ROLLBACK zu psql, dem Postgres-Befehlszeilenclient. Wenn diese Option aktiviert ist, führen alle Fehler zu einem sofortigen Rollback bis kurz vor dem vorherigen Befehl. Das bedeutet, dass Sie in Ihrer Transaktion bleiben können, auch wenn Sie einen Tippfehler machen (das Hauptproblem, das den Fehler verursacht und der Grund, warum ich es geschrieben habe!). Da ich manchmal Leute sehe, die diese Funktion in ihrer Anwendung oder ihrem Treiber emulieren möchten, dachte ich, ich würde genau erklären, wie es in psql funktioniert.

    Zunächst muss klar sein, dass dies keine Postgres-Funktion ist und Sie Postgres selbst nicht anweisen können, Fehler innerhalb einer Transaktion zu ignorieren. Die Arbeit muss von einem Client (wie psql) ausgeführt werden, der hinter den Kulissen Voodoo ausführen kann. Die Funktion ON_ERROR_ROLLBACK ist seit psql-Version 8.1 verfügbar.

    Normalerweise löst jeder Fehler, den Sie machen, eine Ausnahme aus und führt dazu, dass Ihre aktuelle Transaktion als abgebrochen markiert wird. Dies ist ein vernünftiges und erwartetes Verhalten, aber es kann sehr, sehr ärgerlich sein, wenn Sie sich mitten in einer großen Transaktion befinden und etwas falsch eingeben! An diesem Punkt können Sie nur noch die Transaktion rückgängig machen und Ihre gesamte Arbeit verlieren. Beispielsweise:

    Wenn ON_ERROR_ROLLBACK aktiviert ist, gibt psql vor jedem Befehl, den Sie an Postgres senden, einen SAVEPOINT aus. Wenn ein Fehler erkannt wird, wird dann ein ROLLBACK TO den vorherigen Sicherungspunkt ausgegeben, der den Verlauf im Wesentlichen bis zu dem Zeitpunkt zurückspult, an dem Sie den Befehl ausgegeben haben. Dies gibt Ihnen dann die Möglichkeit, den Befehl ohne Fehler erneut einzugeben. Wenn kein Fehler erkannt wurde, führt psql im Hintergrund einen RELEASE-Savepoint aus, da es keinen Grund mehr gibt, den Savepoint beizubehalten. Unser obiges Beispiel wird also:

    Was ist, wenn Sie selbst einen Sicherungspunkt erstellen? Oder sogar ein Savepoint mit dem gleichen Namen wie der, den psql intern verwendet? Kein Problem – ​Postgres lässt mehrere Sicherungspunkte mit demselben Namen zu und führt ein Rollback oder gibt den zuletzt erstellten frei, sodass ON_ERROR_ROLLBACK nahtlos mit vom Benutzer bereitgestellten Sicherungspunkten arbeiten kann.

    Beachten Sie, dass das obige Beispiel ON_ERROR_ROLLBACK (ja, die Groß-/Kleinschreibung muss beachtet werden!) auf „interaktiv“ und nicht nur auf „on“ setzt. Dies ist eine gute Idee, da Sie im Allgemeinen menschliche Fehler abfangen und nicht nur ein SQL-Skript durcharbeiten möchten.

    Wenn Sie dies also zu Ihrer eigenen Anwendung hinzufügen möchten, müssen Sie jeden Befehl in einen versteckten Sicherungspunkt einschließen und ihn dann zurücksetzen oder freigeben. Der Endbenutzer sollte die Befehle SAVEPOINT, ROLLBACK TO oder RELEASE nicht sehen. Daher ändert sich die an das Backend gesendete SQL davon:


    PostgreSQL unterstützt enorme Funktionen, die die Dinge einfacher machen. Einige der Funktionen werden allgemein geschätzt, da sie unglaublich nützlich sind. Der folgende Abschnitt enthält einige der bekannten Funktionen von PostgreSQL, die Sie sich ansehen sollten, da sie Ihnen helfen, die Leistung in der Produktion zu verbessern und den Betrieb zu vereinfachen.

    Funktionen von PostgreSQL

    Von PostgreSQL bereitgestellte Funktionen sind:

    Hadoop, Data Science, Statistik und andere

    • Das Feature Multi-Version Concurrency Control (MVCC) wird von PostgreSQL als erstes implementiert. In Oracle wird die MVCC-Funktion (Multi-Version Concurrency Control) als Snapshot-Isolation bezeichnet.
    • PostgreSQL ist eine der fortschrittlichsten Open-Source-Datenbanken. Sie bietet viele Vorteile für Ihr Unternehmen oder Unternehmen gegenüber anderen Datenbanksystemen. PostgreSQL ist ein objektrelationales Datenbankverwaltungssystem.
    • Benutzer können an der PostgreSQL-Community teilnehmen, um Wissen, Zweifel und Fehler zu posten und zu teilen. Benutzer können ihrer Community als Open-Source-Datenbankverwaltungssystem neue Module entwickeln oder vorschlagen.
    • PostgreSQL hat eine Vielzahl von Communities. Aufgrund der eigenen globalen Gemeinschaft und der verschiedenen Arten von Menschen ist die Entwicklungsmöglichkeit sehr hoch.
    • PostgreSQL unterstützt verschiedene Programmiersprachen wie s C/C++, Python, Ruby, Perl, Open Database Connectivity (ODBC) und Tcl usw. Dadurch können wir verschiedene benutzerdefinierte Funktionen entwickeln.
    • SQL-Funktionen namens „Stored Procedure“ können für eine Serverumgebung verwendet werden.
    • PostgreSQL unterstützt folgende Standardprozedursprachen,
      • PL/pgSQL
      • PL/Tcl
      • PL/Perl
      • PL/Python
      • PL/PHP
      • PL/V8
      • PL/Rubin
      • PL/Java
      • Datentypen
      • Funktionen
      • Betreiber
      • Indexmethoden
      • Benutzerdefinierte Typen
      • Tabellenvererbung
      • Ausgeklügelter Verriegelungsmechanismus
      • Referenzielle Integrität von Fremdschlüsseln
      • Ansichten, Regeln, Unterabfragen
      • Verschachtelte Transaktionen (Savepoints)
      • Asynchrone Replikation
      • Komplexe SQL-Abfragen
      • SQL-Unterauswahlen
      • Transaktionen
      • Parallelitätskontrolle für mehrere Versionen (MVCC)
      • Streaming-Replikation (ab 9.0)
      • Hot-Standby (ab 9.0)
      • PostgreSQL ist mit Hilfe verschiedener Programmiersprachen und Middleware mit vielen Plattformen kompatibel.
      • Es bietet einen hochentwickelten Verriegelungsmechanismus
      • Unterstützung für die Kontrolle der Parallelität mehrerer Versionen
      • Ausgereifte serverseitige Programmierfunktionalität
      • Konform mit dem ANSI SQL-Standard
      • Vollständige Unterstützung für die Client-Server-Netzwerkarchitektur
      • Logbasierte und triggerbasierte Replikation SSL
      • Standby-Server und Hochverfügbarkeit
      • Objektorientiert und ANSI-SQL2008 kompatibel
      • PostgreSQL-Unterstützung für JSON, mit Hilfe von JSON die Verknüpfung mit anderen Datenspeichern wie NoSQL, ist möglich, da es als föderierter Hub für mehrsprachige Datenbanken fungiert.
      • PostgreSQL unterstützt verschiedene Speichertechniken für geografische Daten:
      • PostGIS,
      • Schlüsselwertspeicher,
      • DBLink
      • PostgreSQL unterstützt ACID (Atomizität, Konsistenz, Isolation, Haltbarkeit).
      • Die Transaktion ist eine sehr kleine Einheit eines Programms und kann verschiedene untergeordnete Aufgaben ausführen.
      • Um Genauigkeit, Vollständigkeit und Datenintegrität zu gewährleisten, muss die Transaktion in einem Datenbanksystem ACID sein, was bedeutet, dass sie Atomizität, Konsistenz, Isolation und Dauerhaftigkeit beibehalten sollte.
      • Abgesehen von B+-Baumindextechniken bietet PostgreSQL verschiedene Arten von Techniken.
      • GIN (Generalized Inverted Index) und GiST (Generalized Search Tree) sind Indexierungstechniken, die von PostgreSQL unterstützt werden.
      • Um Strings zu durchsuchen, steht eine Volltextsuche mit der Ausführung von Vektormanipulation und Stringsuche zur Verfügung.
      • PostgreSQL unterstützt verschiedene Replikationsmethoden,
        • Streaming-Replikation,
        • Slony-ich,
        • Kaskadierung,
        • Native Microsoft Windows Server-Version
        • Tabellenbereiche
        • Wiederherstellung zu einem bestimmten Zeitpunkt

        Empfohlene Artikel

        Dies ist eine Anleitung zu den PostgreSQL-Funktionen. Hier besprechen wir die Einführung und verschiedene Funktionen von PostgreSQL. Sie können sich auch die folgenden Artikel ansehen, um mehr zu erfahren –


        Unser Blog

        Eine immer wiederkehrende Frage lautet: „Wie kann ich ein paar Zeilen von einer Datenbank in eine andere kopieren“? Die Leute versuchen, eine Replikation einzurichten oder die gesamte Datenbank zu sichern, aber die Lösung ist ziemlich einfach.

        Beispiel

        Für diesen Blogbeitrag werde ich zwei ähnliche Tabellen erstellen und Daten von einer in eine andere kopieren. Sie befinden sich in derselben Datenbank, aber das spielt keine Rolle, Sie können dieses Beispiel auch verwenden, um in eine andere Datenbank zu kopieren. Selbst auf einem anderen Server reicht das aus, um Argumente für die psql-Befehle zu ändern.

        Nun füge ich zwei Zeilen ein, die ich später in die „copy_table“ kopiere.

        Die Lösung

        Natürlich kann ich die Replikation einrichten, was für das Ad-hoc-Kopieren von zwei Zeilen zu viel Aufwand ist. Natürlich könnte ich die gesamte Datenbank ausgeben, aber stellen Sie sich eine Datenbank mit Millionen von Zeilen vor, und Sie möchten nur diese beiden Zeilen kopieren.

        Glücklicherweise gibt es den Befehl "Kopieren". Einfaches Kopieren speichert die Datei jedoch auf demselben Server, auf dem PostgreSQL ausgeführt wird, und normalerweise haben Sie dort keinen Zugriff auf das Dateisystem. Es gibt noch einen anderen Befehl, den internen Befehl für psql, er heißt „copy“. Es verhält sich genau wie beim Kopieren, schreibt jedoch Dateien auf den Computer, auf dem Sie psql ausführen.

        Speichern unter

        Als erste und einfachste Lösung könnten wir diese beiden Zeilen in einer Datei speichern und später in eine andere Datenbank laden.

        Lassen Sie uns zunächst herausfinden, wie „copy“ funktioniert:

        Wie Sie sehen können, ist der Hauptteil dieses Befehls die Auswahlabfrage, die es ermöglicht, Zeilen auszuwählen, die wir exportieren möchten. Sie können dort jede gewünschte Wo-Klausel angeben.

        Jetzt können wir es in einer Datei speichern:

        Das Laden ist jetzt auch ziemlich einfach mit dem gleichen „copy“-Befehl.

        Nicht in Datei speichern

        Das Speichern in einer Datei hat einen Nachteil: Wenn die Datenmenge riesig ist, wird auch die Datei riesig, verschwendet Speicherplatz und kann langsamer sein als das Laden von Daten über eine Pipe. Sie können eine Pipe verwenden, um die Ausgabe eines psql-Befehls mit der Eingabe eines anderen zu verbinden. Dies ist so einfach wie:

        Wie Sie sehen, ist das viel einfacher, als die Replikation einzurichten oder die gesamte Datenbank zu sichern.


        2. Zeitstempel mit Zeitzone verwenden (timestamptz)

        Wenn wir als Datentyp „timestamptz“ verwenden, um Datum und Uhrzeit der Nachricht zu speichern:

        • Beim Schreiben in die Datenbank lassen wir PostgreSQL die Zeitstempel in UTC konvertieren (wird automatisch durchgeführt, indem der Datentyp auf "timestamptz" gesetzt wird).
        • Wir können den Konfigurationswert der PostgreSQL-Zeitzone auf einen beliebigen Wert setzen (Ich stelle es immer auf UTC). Dieser Zeitzonenwert ist nur in den wenigen Fällen relevant, in denen der Client einen Zeitstempel schreibt, der keine Zeitzone kennt. In diesem Fall weist die PostgreSQL-Laufzeit dem Zeitstempel ihren Zeitzonen-Konfigurationswert zu, wodurch er die Zeitzone erkennt.
        • Um den gespeicherten Zeitstempel in die Zeitzone des Clients umzuwandeln Datenbankschicht wir müssen es nur in die Zeitzone des Clients konvertieren, z.B.:
        • Um den gespeicherten Zeitstempel in die Zeitzone des Clients umzuwandeln Anwendungsschicht, holen wir den Wert aus der Datenbank (zeitzonenabhängig) und konvertieren ihn in die Zeitzone des Clients.

        Wie füge ich Werte aus einer ausgewählten Abfrage in PostgreSQL in eine Tabelle ein?

        Ich habe eine Tabelle items (item_id serial, name varchar(10), item_group int) und eine Tabelle items_ver (id serial, item_id int, name varchar(10), item_group int) .

        Jetzt möchte ich eine Zeile aus items_ver in items_ver einfügen. Gibt es dafür eine kurze SQL-Syntax?

        Es hat besser funktioniert, aber ich habe einen Fehler:

        Dies kann daran liegen, dass die Spalten in den Tabellen in einer anderen Reihenfolge definiert sind. Spielt die Spaltenreihenfolge eine Rolle? Ich hoffte, dass PostgreSQL mit den Spaltennamen übereinstimmt.


        Wie füge ich (Datei-)Daten in eine PostgreSQL-Bytea-Spalte ein?

        Bei dieser Frage geht es nicht um Bytea vs. Oid vs. Blobs vs. große Objekte usw.

        Ich habe eine Tabelle mit einem Primärschlüssel-Integer-Feld und einem Bytea-Feld. Ich möchte Daten in das Bytea-Feld eingeben. Dies kann vermutlich von einer der PL/-Sprachen durchgeführt werden, und ich werde dies möglicherweise in Zukunft mit PL/Python tun.

        Da ich noch teste und experimentiere, möchte ich einfach Daten aus einer Datei (auf dem Server) mit "Standard"-SQL-Anweisungen einfügen. Mir ist bewusst, dass nur Administratoren mit Schreibrechten auf dem Server Daten so einfügen können, wie ich es möchte. Ich mache mir darüber zu diesem Zeitpunkt keine Sorgen, da Benutzer derzeit keine Bytea-Daten einfügen würden. Ich habe die verschiedenen StackExchange-Sites, die PostgreSQL-Archive und das Internet im Allgemeinen durchsucht, aber keine Antwort gefunden.

        Bearbeiten: Diese Diskussion von 2008 impliziert, dass das, was ich tun möchte, nicht möglich ist. Wie werden dann Bytea-Felder verwendet?

        Bearbeiten: Diese ähnliche Frage aus dem Jahr 2005 bleibt unbeantwortet.

        Gelöst: Die hier auf der psycopg-Website bereitgestellten Details bildeten die Grundlage für eine Lösung, die ich in Python geschrieben habe. Es kann auch möglich sein, mit PL/Python binäre Daten in eine Bytea-Spalte einzufügen. Ich weiß nicht, ob dies mit "reinem" SQL möglich ist.


        1 Resposta 1

        Respostas para perguntas individuais:

        A melhor opção é criptografar do lado da aplicação, assim que você receber als informações a serem criptografadas.

        Não é tão simples, mas existem várias coisas prontas para algorítmos conhecidos, Seguros und Recomendados im Internet, Bastanto adaptar para o seu caso de uso específico.

        Für ein Beispiel, verwenden Sie PBKDF2 für Armazenar Senhas. Veja um exemplo utilizando bibliotecas comuns do Java: https://gist.github.com/jtan189/3804290

        Criptografia de senhas não devem ser reversível. O link de resposta citado nos comentários da pergunta, não deve ser berücksichtigung für criptografia de senha, pois é reversível, e inclusive possui problemas de segurança em algumas the respostas.

        É recomendado que um algorítmo forte de "criptografia" de senha seja utilizado, como o bcrypt ou o pbkdf2 . Java possui implementações para estes algorítmos, portanto basta você adaptar sua tabela (no caso usuario) para armazenar os valores adicionais que o algoritmo escolhido necessita.

        Os computadores modernos possuem no processador instruções que allowem agilizar muito a execução de funções de hash como SHA und MD5 além disso, eine GPU-Zulassung que vários hashes sejam gerados simultaneamente, aumentando muito a quantidade de testes por segundo em um ataque de força bruta. Estes algorítmos são feitos para que além de serem seguros do ponto de vista matemático, sejam lentos für serem executados especialmente em uma GPU, que possui a vantagem do paralelismo.

        Em todo caso, se desejar utilizar algo realmente simples, use algo como o seguinte:

        Adicione uma coluna salt na sua tabela usuario .

        Escolha um hash sem colisões conhecidas, como SHA2 oder SHA3 (e verwenden eine Version von 256 Bit oder höher).