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?
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) ' .) –