derzeitig speichere ein byte array eines Bildes in einer Postgre Sql Datenbank.
Leider bekomme ich immer folgende Warnung von Postgre:
“nicht standardkonforme Verwendung von \ in Zeichenkettenkonstante”
Über die Konfigurationsdatei von Postgres konnte ich zwar die Warnung ausstellen, aber ich würde lieber dafür sorgen das diese Warnung gar nicht mehr auftritt!
Ist jemanden das Problem bekannt und kennt einen Workaround dafür?
Und über Prepared Statements habe ich auch schon einmal nachgedacht jedoch bin ich davon wieder abgekommen da ich, wie ich denke, nicht mehrere Prepared Statements gleichzeitig absenden kann. Das wäre nämlich zwingend bei dem programm da es sonst sehr viele Verbindungen zur Datenbank aufbaut und ich würde gerne so wenig SQL wie möglich senden. Bzw. halt nur ein großes SQL-Statement in diesem alle Inserts vorhanden sind.
sieht C/C++ nach PG-API /libpg aus ?! Darf man fragen warum du direkt mit der lib arbeitest und nicht ne gescheite DB-Abstraktionsschicht verwendest?
Ich vermute an dieser Stelle mal, dass die libpg vielleicht in einer nicht ganz backend-konformen version vorliegt - und es deshalb zu solchen warnings kommt … wie gesagt - ne Vermutung
Aber natürlich kann man … mehr oder minder beliebig viele - bis zum collaps der Systemressourcen …
Wenn du “sowenig SQL wie möglich senden” willst - sind Prepared Statements eigentlich das non+ultra … ob du mehrere Statements auf einer Connection hast - in einer Transaktion - oder verteilt bleibt ganz dir überlassen. Im Grunde gelten für derartige Statements die gleichen Regeln wie fuer herkömmliche auch.
escape_string_warning (boolean) When on, a warning is issued if a backslash () appears in an ordinary string literal (‘…’ syntax) and standard_conforming_strings is off. The default is on.
Applications that wish to use backslash as escape should be modified to use escape string syntax (E’…'), because the default behavior of ordinary strings will change in a future release for SQL compatibility. This variable can be enabled to help detect applications that will break.
hallo,
ich bin noch neu im Umgang mit PostgresDB und habe eine Frage.
ich bekomme die beschriebene Fehlermeldung wenn ich eine Query an meine DB schicke z.B.
SELECT * FROM table WHERE table.name ILIKE '%\\\\%'
Ich habe das mit dem Escapen noch nicht verstanden, vllt kann mir jemand das nochmal an einem Beispiel erklären? Vielen Dank im Voraus!
test=*# create table escape (name text);
CREATE TABLE
test=*# select * from escape where name ILIKE '%\\\\%';
WARNING: nonstandard use of \\ in a string literal
LINE 1: select * from escape where name ILIKE '%\\\\%';
^
HINT: Use the escape string syntax for backslashes, e.g., E'\\'.
name
------
(0 rows)
test=*# select * from escape where name ILIKE E'%\\\\%';
name
------
(0 rows)
Wenn man die Fehlermeldung nun in Google einkippt passiert dies:
Hallo,
danke für die Hilfe hab mich ein wenig dumm angestellt. Ich hätte mal noch eine Frage:
Applications that wish to use backslash as escape should be modified to use escape string syntax (E'...'), because the default behavior of ordinary strings will change in a future release for SQL compatibility. This variable can be enabled to help detect applications that will break.
Wenn ich zum Beispiel eine Url in einer Spalte speichern möchte kommt der gleiche Fehler.Allerdings möchte ich ja nichts escapen. Dies lässt sich nur durch abstellen der Warnung ändern oder versteh ich da etwas falsch? Viele Grüße