【问题标题】:pgSQL: am trying to insert into a table using dblink_exec() method, but getting following errorpgSQL:正在尝试使用 dblink_exec() 方法插入表中,但出现以下错误
【发布时间】:2014-03-15 10:13:40
【问题描述】:
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)')

执行此查询时出现以下错误

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's(我认为 ' 是问题所在) 查询将其连接为 ''D PEARL 2000 Caps 10's''

【问题讨论】:

    标签: postgresql insert special-characters dblink stringescapeutils


    【解决方案1】:

    希望对你有帮助,

    创建或替换函数 create_or_update_test_employee_table() 将触发器返回为 $_$ 宣布 查询文字; fname 文本; lname 文本; id 整数; created_at 时间戳; 开始 fname = NEW.first_name; lname = NEW.last_name; 如果(TG_OP = '插入')然后 id = 新的.id; query = '插入 test_employee(id, first_name, last_name) values(''' || id || ''',''' || fname || ''',''' || lname || ''' )'; 执行 dblink_exec('dbname=test_db',query); 返回新的; 万一; 如果(TG_OP = '更新')那么 id = OLD.id; 查询 = '更新 test_employee 设置 first_name = ''' ||名称 || ''', 姓氏 = ''' ||名字 || ''' 哪里 id = ' || ID ||''; 执行 dblink_exec('dbname=test_db',query); 返回新的; 万一; 如果(TG_OP = '删除')然后 PERFORM dblink_exec('dbname=test_db','DELETE FROM test_employee WHERE id = ' || OLD.id); 回归旧; 万一; 结束 $_$ 语言 'plpgsql';

    【讨论】:

      【解决方案2】:

      Caps 10's 应该是大写 10''''s

      您将 dblink 的单引号加倍,第二次将单引号加倍。

      【讨论】:

        【解决方案3】:

        转义单引号

        D PEARL 2000 Caps 10\'\'s

        【讨论】:

        • 然后尝试使用 \' 转义您的引号。你必须逃避 mysql 的转义。
        • 不工作,并且正在使用 PostgreSQL,我已将实际的 ''D PEARL 2000 Caps 10's'' 更改为 ''D PEARL 2000 Caps 10\'s''
        • \'两次,我修改了答案。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-03
        • 2015-10-22
        • 1970-01-01
        • 1970-01-01
        • 2011-01-12
        • 2021-08-04
        • 2022-11-13
        相关资源
        最近更新 更多