PostgreSQL/dblink:发送带有文本参数条件的查询
PostgreSQL/dblink: send a query with a condition on a text parameter
我正在尝试编写一个使用 dblink 将查询发送到外部数据库的函数,但我需要在文本列上设置一个条件,但它不起作用。
看起来像这样;
CREATE OR REPLACE FUNCTION dblink_test(param VARCHAR(32))
RETURNS TABLE (...) AS $$
BEGIN
PERFORM dblink_connect('myconn', ...);
RETURN QUERY SELECT * FROM dblink('myconn',
format('SELECT * FROM someTable where name= %s', param));
END
$$ LANGUAGE plpgsql;
但它 return 像 column "param" does not exist
这样的错误,这真的很烦人。我该怎么做?
格式函数会给你输入 'abc'
类似的东西:
SELECT * FROM someTable where name= abc
但是你想检查字符串文字,因此你需要引用字符串(就像在 SQL 中一样)。我建议使用 quote_literal()
(以避免 SQL 注入):
CREATE OR REPLACE FUNCTION dblink_test(param VARCHAR(32))
RETURNS TABLE (...) AS $$
BEGIN
PERFORM dblink_connect('myconn', ...);
RETURN QUERY SELECT * FROM dblink('myconn',
format('SELECT * FROM someTable where name = %s', quote_literal(param)));
END
$$ LANGUAGE plpgsql;
我正在尝试编写一个使用 dblink 将查询发送到外部数据库的函数,但我需要在文本列上设置一个条件,但它不起作用。 看起来像这样;
CREATE OR REPLACE FUNCTION dblink_test(param VARCHAR(32))
RETURNS TABLE (...) AS $$
BEGIN
PERFORM dblink_connect('myconn', ...);
RETURN QUERY SELECT * FROM dblink('myconn',
format('SELECT * FROM someTable where name= %s', param));
END
$$ LANGUAGE plpgsql;
但它 return 像 column "param" does not exist
这样的错误,这真的很烦人。我该怎么做?
格式函数会给你输入 'abc'
类似的东西:
SELECT * FROM someTable where name= abc
但是你想检查字符串文字,因此你需要引用字符串(就像在 SQL 中一样)。我建议使用 quote_literal()
(以避免 SQL 注入):
CREATE OR REPLACE FUNCTION dblink_test(param VARCHAR(32))
RETURNS TABLE (...) AS $$
BEGIN
PERFORM dblink_connect('myconn', ...);
RETURN QUERY SELECT * FROM dblink('myconn',
format('SELECT * FROM someTable where name = %s', quote_literal(param)));
END
$$ LANGUAGE plpgsql;