Re: Help : insert a bytea data into new table

Поиск
Список
Период
Сортировка
От dennis
Тема Re: Help : insert a bytea data into new table
Дата
Msg-id hn9qd0$152v$1@news.hub.org
обсуждение исходный текст
Ответ на Re: Help : insert a bytea data into new table  (Ben Morrow <ben@morrow.me.uk>)
Список pgsql-sql
Dear Ben
   thanks for you anwser.
I try to add function quote_literal on my sql statement .

but it raise other error message (quote_literal not support bytea format):     function quote_literal(bytea) does not
exist





Ben Morrow 提到:
> Quoth dennis <dennis@teltel.com>:
>> Hi Ben
>>
>> here is my function , it's for fix missing chunk problem.
>> It has same problem ,please take look
>>
>>
>> thank for you help
>>
>> -------------table----------------------
>>
>>
>> db=# \d usersessiontable;
>>          Table "public.usersessiontable"
>>    Column   |          Type          | Modifiers
>> -----------+------------------------+-----------
>>   serverid  | character varying(100) |
>>   sessionid | character varying(50)  |
>>   data      | bytea                  |
>> Indexes:
>>      "usersessiontable_idx" btree (sessionid)
>> db=#
>>
>> db=# \d usersessiontable_test;
>>          Table "public.usersessiontable"
>>    Column   |          Type          | Modifiers
>> -----------+------------------------+-----------
>>   serverid  | character varying(100) |
>>   sessionid | character varying(50)  |
>>   data      | bytea                  |
>>
>> ------------------function--------------------------------
>>
>>
>> CREATE OR REPLACE FUNCTION check_missing_chunk_table_usersessiontable()
>>    RETURNS integer AS
>> $BODY$
>> declare
>> begin
>>     records = 0;
>>     OPEN curs1  FOR EXECUTE 'SELECT * FROM usersessiontable ORDER BY 
>> sessionid';
>>     loop
>>          FETCH curs1 INTO rowvar;
>>          IF  NOT FOUND THEN
>>              EXIT;
>>          END IF;
>>          begin
>>          a_sql = 'insert into 
>> usersessiontable_test(sessionid,serverid,data) 
>> values('''||rowvar.sessionid||''','''||rowvar.serverid||''',E'''||rowvar.data||''')';<<--my 
> 
> You are trying to concatenate ''',E''' (of type text) and rowvar.data
> (of type bytea). This is where the error is coming from. (This actually
> works in 8.4, so I presume you're using an earlier version?) In any
> case, this is not a safe way to interpolate into an SQL string: you need
> the quote_literal function.
> 
>     a_sql = 'insert into usersessiontable (sessionid, serverid, data) '
>         || 'values (' || quote_literal(rowvar.sessionid) || ', '
>         || quote_literal(rowvar.serverid) || ', '
>         || quote_literal(rowvar.data) || ')';
> 
> (Is there a function which will do %-interpolation the way RAISE does?
> It would be much clearer in cases like this.)
> 
> Ben
> 
> 


В списке pgsql-sql по дате отправления:

Предыдущее
От: Navanethan Muthusamy
Дата:
Сообщение: Clarification With Money data type
Следующее
От: dennis
Дата:
Сообщение: Re: Help : insert a bytea data into new table