2016-05-10 11 views
0

Ich muss führen eine PostgreSQL upsert Abfrage mit Active ausführen:Insert Binärwert mit + Active

sql = "INSERT INTO call_records (created_at, updated_at, number_tag, tag, raw_data) 
    VALUES (current_timestamp, current_timestamp, 123, 'R', BINARY_VALUE) 
    ON CONFLICT (number_tag) DO 
    UPDATE SET tag = 'L' WHERE call_records.tag='L'" 

Die Spalte raw_data enthält den binären Wert BINARY_VALUE beim Versuch, den binären Wert zu speichern, indem Sie den folgenden Befehl ausführen:

ActiveRecord::Base.connection.execute(%Q{#{sql}}) 

Es gibt die folgenden Fehler:

ArgumentError: string contains null byte 

Die Binärkette sieht wie folgt aus:

"\x00\x00\x00\x95\x01\x00\x00\x02" 

Wie kann ich das speichern? Ich habe auch versucht:

value = "\x00\x00\x00\x95\x01\x00\x00\x02".unpack('H*')[0] 
ActiveRecord::Base.connection.quote("\\x#{value}") 

Aber es funktioniert nicht. Gibt es einen anderen Weg, dies zu tun?

+0

Welche Versionen von Rails und Ruby verwenden Sie? (Als Randnotiz, tu das nicht: '... execute (% Q {# {sql}})'. 'Sql' ist bereits eine Zeichenkette. Mach einfach folgendes:' ... execute (sql) ' .) –

Antwort

0

Fand es die Antwort auf die Frage

raw_bytea Verfahren in Schienen active_record Verbindung ist.