Thread: Problem with encode() function
I have a table where I have stored plain text passwords in a varchar field. I would like to convert these to an encoded field. I have been able to insert values into a test table using this syntax with a literal password: insert into testtable (name, password) values ('glenn',encode ('mypassword','base64')); and I can read them back out with the decode(password,'base64') syntax. This is the behavior I want. But when I try to encode data from an existing table: create table newtable as select name, encode(password,'base64') as password from oldtable; I get this error ERROR: Function encode(character varying, "unknown") does not exist Unable to identify a function that satisfies the given argument types You may need to add explicit typecasts I have tried the following casts password::text case(password as text) but I still get the error: ERROR: Function encode(text, "unknown") does not exist Unable to identify a function that satisfies the given argument types You may need to add explicit typecasts Is there a way I can accomplish this task? Thanks.
Glenn_Wiens@via-christi.org writes: > but I still get the error: > > ERROR: Function encode(text, "unknown") does not exist > Unable to identify a function that satisfies the given argument > types > You may need to add explicit typecasts > > Is there a way I can accomplish this task? The problem is that there is no cast from varchar to bytea (which is what encode takes as first argument). Try creating the cast first: CREATE CAST (varchar as bytea) WITHOUT FUNCTION; SELECT encode(password::bytea, 'base64'::text) FROM texttable; You may want to drop the cast afterwards. Regards, Manuel.
Thanks -- that did the trick! And when I went to consult my documentation about this command, I realized I was looking at 7.2 docs (downloaded) vs my currently running version of 7.3. Manuel Sugawara <masm@fciencias.una To: Glenn_Wiens@via-christi.org m.mx> cc: pgsql-novice@postgresql.org Sent by: Fax to: masm@conexa.fcienci Subject: Re: [NOVICE] Problem with encode() function as.unam.mx 05/21/2004 05:21 PM Glenn_Wiens@via-christi.org writes: > but I still get the error: > > ERROR: Function encode(text, "unknown") does not exist > Unable to identify a function that satisfies the given argument > types > You may need to add explicit typecasts > > Is there a way I can accomplish this task? The problem is that there is no cast from varchar to bytea (which is what encode takes as first argument). Try creating the cast first: CREATE CAST (varchar as bytea) WITHOUT FUNCTION; SELECT encode(password::bytea, 'base64'::text) FROM texttable; You may want to drop the cast afterwards. Regards, Manuel.