📜  将参数传递到 postgres bash (1)

📅  最后修改于: 2023-12-03 15:39:15.649000             🧑  作者: Mango

将参数传递到 postgres bash

在 PostgreSQL 中,我们经常需要在 Shell 脚本中调用数据库操作,并且要向 SQL 中传递参数。这时候,就需要将参数传递到 postgres 的 bash 中。

1. 使用 psql

可以使用 psql 命令连接到 PostgreSQL 数据库,并在 psql 命令行中执行 SQL 语句。要将参数传递到 psql 命令行中,可以使用 psql 的 -v 选项。

#!/bin/bash

params="'Hello World'"
psql -v var="$params" -U postgres << EOF
SELECT :var;
EOF

在这个例子中,我们向变量 var 中传递了一个字符串 'Hello World'。然后,在 SQL 语句中使用了 psql 的 :var 语法来引用这个变量。运行这个脚本后,将会输出 'Hello World'。

2. 使用 PostgreSQL 的 PL/pgSQL

如果你需要在你的 Shell 脚本中执行更复杂的 SQL 语句,你可以使用 PostgreSQL 的 PL/pgSQL。PL/pgSQL 是一种存储过程语言,可用于编写批处理或其他复杂的 SQL 应用程序。

#!/bin/bash

params="'John', 'Doe'"
psql -U postgres -c "CREATE FUNCTION get_fullname(firstname text, lastname text) RETURNS text AS \$\$ BEGIN RETURN firstname || ' ' || lastname; END; \$\$ LANGUAGE plpgsql;"
psql -U postgres -c "SELECT get_fullname($params);"
psql -U postgres -c "DROP FUNCTION IF EXISTS get_fullname(firstname text, lastname text);"

在这个例子中,我们创建了一个存储过程 get_fullname,该过程接受两个参数 firstname 和 lastname,并将它们合并成一个字符串。然后,我们使用 psql 命令行中的 -c 选项,以及将参数传递到 SQL 语句中的方法,直接执行了 SQL 语句。

3. 使用 PostgreSQL 的 prepared statement

另一种将参数传递到 sql 中的方法是使用 prepared statement。prepared statement 是一种预编译的 SQL 语句,它可以接受动态参数。在 PostgreSQL 中,可以使用 PREPARE 和 EXECUTE 命令来创建和执行 prepared statement。

#!/bin/bash

params="'John'"
psql -U postgres << EOF
PREPARE get_firstname AS SELECT firstname FROM users WHERE lastname = \$1;
EXECUTE get_firstname($params);
DEALLOCATE get_firstname;
EOF

在这个例子中,我们创建了一个 prepared statement,该 statement 接受一个参数,并从 users 表中返回 firstname。我们使用了 $1 来引用参数。最后,我们使用 DEALLOCATE 命令来清理 prepared statement。

总结

以上是三种常见的将参数传递到 postgres bash 中的方式:通过 psql 的 -v 选项、使用 PostgreSQL 的 PL/pgSQL 和 prepared statement。根据实际情况,可以选择最合适的方法。