pgSQL: пытаюсь вставить в таблицу, используя метод dblink_exec(), но получаю следующую ошибку

select dblink_exec('hostaddr=59.89.210.56 port=5432 dbname=mydb user=postgres password=****','insert into gtab04 (productid,product,itgrid,itemtype,patentid,taxid,convfact,boxpack,cntid )values (2301,''D PEARL 2000 Caps 10's'',4,2,7,3,10,'''',0)')

пока exe этот запрос я получаю следующую ошибку

ERROR:  syntax error at or near "s"
LINE 2: ...oxpack,cntid )values (2301,''D PEARL 2000 Caps 10's'',4,2,7,..

проблема в названии продукта, т.е. мое имя продукта - D PEARL 2000 Caps 10 (я думаю, что "решает проблему"), запрос выглядит как "D PEARL 2000 Caps 10" <- здесь проблема

3 ответа

Решение

Caps 10's должны быть заглавные буквы 10''''s

Вы удваиваете одинарные кавычки для dblink один раз и для нахождения внутри строки во второй раз.

Я надеюсь, что это поможет вам,

функция создания или замены create_or_update_test_employee_table () возвращает триггер как $_$
объявлять
    текст запроса;
    текст имени;
    lname text;
    целое число id;
    метка времени созданного времени;
начать
    fname = NEW.first_name;
    lname = NEW.last_name;

    IF (TG_OP = 'INSERT') THEN
        id = NEW.id;
        query = 'вставить в test_employee(id, first_name, last_name) значения (' '| || id || ''',''' || fname || ''',''' || lname || ''')';
        PERFORM dblink_exec('dbname=test_db', запрос);
        ВЕРНУТЬ НОВЫЙ;
    END IF;

    IF (TG_OP = 'UPDATE') THEN
        id = OLD.id;
        query = 'update test_employee set first_name =' '' || имя || '' ', last_name =' '' || имя || '' 'ГДЕ id =' || id || '';
        PERFORM dblink_exec ('dbname = test_db', запрос);
        ВЕРНУТЬ НОВЫЙ;
    END IF;

    IF (TG_OP = 'DELETE') THEN
        PERFORM dblink_exec ('dbname = test_db', 'DELETE FROM test_employee WHERE id = ' || OLD.id);
        ВОЗВРАТИТЬ СТАРЫЙ;
    END IF;

end $_$ language 'plpgsql';

Избежать одиночной цитаты

D PEARL 2000 Caps 10\'\'s

Другие вопросы по тегам