2017-04-13 2 views
0

Ich versuche update ein Texttyp Spalte in Postgres from Node.js. Ich möchte eine dynamische Zeichenfolge an die Daten in der Texttyp-Spalte anhängen.Wie füge ich eine dynamische Zeichenfolge zu einer Texttyp-Spalte in Postgres durch Node.js hinzu?

aber ich erhalte eine Fehlermeldung

"error: could not determine data type of parameter $1"

var pg = require('pg'); 
 

 
var connectionString = process.env.DATABASE_URL || "pg://admin:[email protected]:5432/imagesearchexperiment"; 
 

 
var client = new pg.Client(connectionString); 
 
client.connect(); 
 

 
client.query("DROP TABLE IF EXISTS imagesearchexperiment"); 
 
client.query("CREATE TABLE IF NOT EXISTS imagesearchexperiment(ipAddress varchar(64), searchqueries text)"); 
 

 
client.query("INSERT INTO imagesearchexperiment(ipAddress, searchqueries) VALUES($1, $2)",["ipAddress1","query1<>query2<>query3"]); 
 
client.query("INSERT INTO imagesearchexperiment(ipAddress, searchqueries) VALUES($1, $2)",["ipAddress2","query1<>query2<>query3"]); 
 
client.query("INSERT INTO imagesearchexperiment(ipAddress, searchqueries) VALUES($1, $2)",["ipAddress3","query1<>query2<>query3"]); 
 

 
var searchQuery = "query4"; 
 
var ip = "ipAddress3"; 
 

 
// The following line is causing an error - error: could not determine data type of parameter $1 
 
client.query("UPDATE imagesearchexperiment SET searchqueries = CONCAT($1, searchqueries) WHERE ipAddress = $2", [searchQuery, ip]);

Ich habe die folgenden Links ausgecheckt.

Ihre Lösung funktioniert, wenn ich keine dynamische Zeichenfolge hatte.

  1. SQL Server - Adding a string to a text column (concat equivalent)
  2. How can I add text to SQL Column
  3. How to prepend a string to a column value in MySQL?
  4. How can I append a string to an existing field in MySQL?

Bitte Vorschläge teilen. Danke :)

+0

Try 'CONCAT ($ 1 :: Text, Suchanfragen)';) –

+0

Wenn Sie sicher sind, dass keine der Saiten sind 'null', können Sie' verwenden $ 1 || searchqueries' - Das passiert, weil 'CONCAT()' [generische Parameter] (https://www.postgresql.org/docs/current/static/datatype-pseudo.html) verwendet (genauer gesagt 'any'). Sie müssen also immer mit Parametern aufrufen, deren Typen dem Abfrageparser bekannt sind. Sie können Umwandlungen verwenden, um dies in SQL zu erreichen (wie zuvor vorgeschlagen) oder (normalerweise) können Sie den Parametertyp über die Bindung festlegen (im Falle von vorbereiteten Anweisungen): dies hängt jedoch stark von Ihrer Client-Bibliothek ab. – pozs

+1

@ vitaly-t Danke :), es funktioniert jetzt – dsinecos

Antwort

0

Funktion CONCAT ist nicht sicher über den Datentyp, den es bekommt. Explizite Typumwandlung als ::text helfen:

CONCAT($1::text, searchqueries) 
Verwandte Themen