Postgres变量是通过\ set命令创建的,例如...\set myvariable value...,然后可以替换为...SELECT * FROM :myvariable.table1;... 要么 ...SELECT * FROM table1 WHERE :myvariable IS NULL;编辑:从psql 9.1开始,变量可以用引号引起来,如下所示:\set myvariable value SELECT * FROM table1 WHERE column1 = :'myvariable';在旧版本的psql客户端中:...如果要将变量用作条件字符串查询中的值,例如...SELECT * FROM table1 WHERE column1 = ':myvariable';...那么您需要在变量本身中包含引号,因为上述内容将无法正常工作。而是这样定义您的变量...\set myvariable 'value'但是,如果像我一样,您遇到了要从现有变量中创建字符串的情况,我发现窍门就是...\set quoted_myvariable '\'' :myvariable '\''现在,您同时具有相同字符串的带引号和不带引号的变量!而且你可以做这样的事情....INSERT INTO :myvariable.table1 SELECT * FROM table2 WHERE column1 = :quoted_myvariable;
关于PSQL变量的最后一句话:如果将它们用SQL语句括在单引号中,它们将不会扩展。因此,这不起作用:SELECT * FROM foo WHERE bar = ':myvariable'要在SQL语句中扩展为字符串文字,必须在变量集中包括引号。但是,变量值已经必须用引号引起来,这意味着您需要第二组引号,并且必须对内部引号进行转义。因此,您需要:\set myvariable '\'somestring\'' SELECT * FROM foo WHERE bar = :myvariable编辑:从PostgreSQL 9.1开始,您可以改写:\set myvariable somestringSELECT * FROM foo WHERE bar = :'myvariable'