如何将MySQL风格的问号`?`绑定参数转换为Postgres风格的`$ 1`绑定参数

我正在将一个现有的项目从MySQL转换到Postgres。 在代码中有相当多的原始SQL文字使用? 作为占位符,例如

  SELECT id FROM users WHERE name = ? 

但是我得到这个错误:

 DB query error: error: operator does not exist: character varying = ? 

我不想转换所有我现有的SQL ? 到Postgres风格的运营商,如$1

是否有某种方式让node-postgres接受问号,或者是一个可以转换为postgres样式参数的工具?

请注意,某种基于正则expression式的hack是不可接受的,因为问号可以在引号内,或者反斜线转义到任何深度。

有没有什么方法让node-postgres接受问号呢?

没有。 而且没有直接的对应关系?$1语法,因为后者意味着参数重用,而? 不允许。 例如,使用? ? ? ? ? ? 意味着你有3个格式参数,而$1 $2 $2意味着你有两个格式参数。

或可以转换为Postgres风格参数的实用工具?

不太可能,因为没有直接的对应关系,所以转换只能是单向的,这样会使这样的效用变得毫无用处。 你可以用一个单一的正则expression式来代替每一件事情? $ + index + 1

我不想转换所有我现有的SQL ? 到Postgres风格的运营商,如$1

你没有太多的select。 它必须完成。 另外, $1的方式比? ,由于参数重用,加上可选的扩展。 例如, pg-promise可以很好地扩展它们,使用各种经常需要的格式化修饰符: ^~:json:csv等等。

请注意,某种基于正则expression式的hack是不可接受的,因为问号可以在引号内,或者反斜线转义到任何深度。

您可能会花更less的时间手工转换您的SQL,而不是编写单向转换的实用程序。

Interesting Posts