2016-09-12 5 views
0

Ich versuche ? in der folgenden Art und Weise zu verwenden (ich es in Golang verwenden Abfrage zu generieren, aber es scheint, wie es nicht abhängig ist Go):PostgreSQL "?" Argument Platzhalter funktioniert nicht für „MIT“

WITH Tmp(name, enabled) AS (
    VALUES(?, ?),(?, ?) 
) 
UPDATE table_groups 
    SET enabled = (SELECT enabled 
        FROM Tmp 
        WHERE table_groups.name=Tmp.name) 
WHERE table_groups.name IN (SELECT name FROM Tmp) 

bekommen :

syntax error at or near "," 

Wenn ich ? in der obigen Aussage durch konkrete Werte ersetzen, funktioniert alles einwandfrei. Gibt es ein Problem mit ? mit WITH und wie würde ich es umgehen? Vielen Dank.

+1

Unrelated: Sie müssen nicht die skalare Unterabfrage müssen. – wildplasser

+2

Ich dachte, Postgres funktioniert nur mit nummerierten Platzhaltern, d. H. "$ 1". –

+1

Mit welchem ​​Treiberpaket arbeiten Sie mit pgsql? Sie wissen, dass Go keine Treiber für RDBMS in seiner Standardbibliothek enthält. Daher müssen Sie uns unbedingt mitteilen, was Sie tun. Wenn Sie 'github.com/lib/pq' verwenden, erwähnen [die Dokumente] (https://godoc.org/github.com/lib/pq) nur' $ n'-Stil-Parameter, wie @Ainar- Ich schlug vor. IOW, Formate von Abfrageplatzhaltern sind treiberspezifisch, nicht universell. – kostix

Antwort

0

Go unterstützt dies nicht von der Box.

Sie können jmoiron/sqlx verwenden, wenn Sie diese funktionale wollen

Beispiel SQLX (Fa docs):

var levels = []int{4, 6, 7} 
query, args, err := sqlx.In("SELECT * FROM users WHERE level IN (?);", levels) 

// sqlx.In returns queries with the `?` bindvar, we can rebind it for our backend 
query = db.Rebind(query) 
rows, err := db.Query(query, args...) 
Verwandte Themen