2017-06-28 1 views
6

Ich bin dabei, einige Tools zu konvertieren, die MySQL zu PostgreSQL verwenden. Damit war ich auf einige Probleme gestoßen, konnte aber fast alles finden. Der, mit dem ich ein Problem habe, ist HEX() und UNHEX(). Ich habe versucht, encode(%s, 'hex') und decode(%s, 'hex'), die tatsächlich aufhören zu verursachen, dass ich Fehler habe, aber es schien immer noch nicht den Trick zu tun. Hat jemand eine Idee, was das Äquivalent dieser Funktionen in Postgres wäre? HierMySQL HEX() und UNHEX() Äquivalent in Postgres?

ist die alte MySQL-Abfrage:

SELECT HEX(test_table.hash), 
     title, 
     user, 
     reason, 
     description, 
     url, 
     performed, 
     comment, 
     authenticated, 
     status 
FROM alerts 
JOIN user_responses ON test_table.hash = user_responses.hash 
JOIN test_status ON test_table.hash = test_status.hash 
WHERE status = %s 

Und hier ist meine aktualisierte Abfrage in PostgreSQL Format:

SELECT encode(test_table.hash, 'hex') as hash, 
     title, 
     user, 
     reason, 
     description, 
     url, 
     performed, 
     comment, 
     authenticated, 
     status 
FROM test_table 
JOIN user_responses ON test_table.hash = user_responses.hash 
JOIN test_status ON test_table.hash = test_status.hash 
WHERE status = %s 

Dank!

Antwort

4
create function hex(text) returns text language sql immutable strict as $$ 
    select encode($1::bytea, 'hex') 
$$; 

create function hex(bigint) returns text language sql immutable strict as $$ 
    select to_hex($1) 
$$; 

create function unhex(text) returns text language sql immutable strict as $$ 
    select encode(decode($1, 'hex'), 'escape') 
$$; 


select hex('abc'), hex(123), unhex(hex('PostgreSQL')); 

Ergebnis:

 
╔════════╤═════╤════════════╗ 
║ hex │ hex │ unhex ║ 
╠════════╪═════╪════════════╣ 
║ 616263 │ 7b │ PostgreSQL ║ 
╚════════╧═════╧════════════╝ 

2

Ich empfehle die mysqlcompat Bibliothek für Postgres Check-out, es eine ganze Reihe von MySQL-Funktionen enthält, um Postgres portiert.

Sie können ihre Implementierungen der HEX oder UNHEX Funktionen sehen. Insbesondere ist zu beachten, dass die MySQL-hex Funktion two different modes of working hat:

Wenn das Argument ein String ist, wird jedes Zeichen in dem Argumente zu zwei hexadezimalen Ziffern umgewandelt.

Wenn das Argument dezimal ist, gibt die Funktion eine hexadezimale Zeichenfolgendarstellung des Arguments zurück und wird als eine lange (BIGINT) Zahl behandelt.

Wenn Sie also Ihre eigenen rollen, stellen Sie sicher, dass Sie alle möglichen Anwendungsfälle unterstützen, so wie es mysqlcompat tut.