Ich möchte ein Array von Strings in einer Tabelle speichern, an die ich dann weitere Daten anhängen kann.Veränderbares Array von Strings in PostgreSQL
Meine Tabelle sieht wie folgt aus:
CREATE TABLE users (id SERIAL, username varchar(32), password char(40), name varchar(64), age integer, successful_logins varchar(32)[10], failed_logins varchar(32)[10], roles text[3]);
Ich habe dies versucht, aber es tut nichts tun:
UPDATE users SET successful_logins = array_append(successful_logins, :timestamp) WHERE username = :username;
Die :varname
kommt von einem JDBI Treiber Ich verwende, aber ich bin vorbei in ein Faden. Warum funktioniert das nicht? Gibt es einen besseren Weg, um das gleiche Ergebnis zu erzielen?
EDIT:
Hier ist der Treiber verwende ich:
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901.jdbc4</version>
</dependency>
ich keine Fehlermeldung angezeigt, und es scheint mein DAO oder Treiber werden Releted. ist der DAO-Code:
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
@SqlUpdate("UPDATE users SET successful_logins=ARRAY_APPEND((SELECT successful_logins FROM users WHERE username=:username),:timestamp)WHERE username=:username")
void addSuccessfulLogin(@Bind("timestamp") String timestamp, @Bind("username") String username);
Als ich dies versuche in psql
mit dem Vars mit Werten ersetzt es funktioniert. Ich frage mich, ob dies ein Casting-Problem ist? Muss ich meine Zeichenfolge in etwas umwandeln?
Inwiefern funktioniert es nicht? Erhalten Sie einen Fehler? Wenn ja, zeig es uns * (Frage bearbeiten) *. Wenn kein Fehler vorliegt, gibt die Anweisung eine Aktualisierungsanzahl von 1 zurück? – Andreas
@Andreas Ich habe meine Antwort mit einigen Informationen aktualisiert. Ich verwende ein DAO, um in die DB zu schreiben, ich habe den obigen Code eingefügt. Ich bekomme keinen Fehler in meinem Programm, möglicherweise ein Fehler in den PSQL-Protokollen? Weißt du wo sie sind? – maffo
Nun, es sieht so aus, als ob Ihnen ein Leerzeichen zwischen ARRAY_APPEND() und WHERE fehlt ... –