pgsql执行脚本并传参

这篇博客介绍了在不登陆和登陆psql情况下执行PostgreSQL SQL脚本的方法,包括设置客户端编码、指定用户和数据库、传参等。重点讨论了如何在命令行中通过-psql和sqlshell工具来运行脚本,并处理可能出现的模式和编码问题。同时提到了在不同模式下操作数据库的注意事项,如切换模式和设置搜索路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编写脚本

参数是 v1,使用方式:冒号:+参数v1
select m.movieid,r.rating
from users u join ratings r ON u.userid =r.userid
join movies m
on r.movieid =m.movieid
where u.userid =:v1;
使用第一种方式就行,第二种目前对我有问题,并且还不知道能不能传参。

(1)不登陆psql

postgresql的自带的数据库管理工具是psql,该工具十分稳定,可靠,Windows和Linux系统都有,因此,是运行SQL脚本的首选。
set client_encoding to 'utf8';如果执行脚本报编码问题,在脚本中加入该命令,因为客户端是gbk编码
psql -U username -d myDataBase -f “C:\Users\70201\Desktop\新建文件夹 (2)\作业2.sql”
##username是登陆用户名,mydatabase是要登陆哪个数据库,-f后接脚本绝对路径

1.进入PostgreSQL的bin目录,从此处进入cmd

在这里插入图片描述

2.执行脚本 -u是用户名 -v是传参
在这里插入图片描述

(2)登陆psql

1.搜索sql shell
在这里插入图片描述
2.登录
直接回车进入默认库postgres
口令输入用户密码,我的是123456

\l ##列举数据库
\c 数据库名称 ##切换数据库
在这里插入图片描述
\encoding 显示字符集:

在这里插入图片描述
\d 表名 查看某个库中的某个表结构
在这里插入图片描述

\dn 查看模式
在这里插入图片描述
查看模式下的表,模式.表名。如果不加则报错:关系“表名”不存在。因为默认是在模式public下
在这里插入图片描述
切换模式a,因为默认是在public模式下(我这里没有是我删除public了,但是pg还是会在public下找表)
\dt 查看表
在这里插入图片描述

查看表数据
在这里插入图片描述

\i 脚本名 ##绝对路径,执行这个脚本
我这里访问受限,等以后再解决

退出psgl:\q

报错:关系“表名”不存在。

错误原因:postgres数据库,使用程序连接默认进入的是public的schema。此处我选择在public下建表,如果以后需要切换模式,到时再用下面方法
解决方法:切换模式schema。

SET search_path=test_schema;
在 Bash 脚本执行 PostgreSQL 更新脚本,你需要做的是: 1. **连接到数据库**: 首先,你需要通过 `psql` 命令行工具连接到你的 PostgreSQL 数据库。这通常涉及提供数据库名、用户名和密码。例如: ```bash PGPASSWORD=mysecretpassword psql -U myusername -d mydatabase ``` 2. **运行 SQL 脚本**: 进入 PostgreSQL 命令模式后,你可以使用 `\i` 或 `\I` (取决于是否忽略错误) 命令来加载 SQL 脚本文件。假设你的脚本文件名为 `update_script.sql`,则命令如下: ```bash \i update_script.sql ``` 或者 ```bash \I update_script.sql # 如果你想忽略错误继续执行 ``` 3. **设置事务**: 为了安全起见,建议在执行重要的更新操作前设置一个事务,使用 `BEGIN;` 开始,`COMMIT;` 结束。如果需要回滚,则使用 `ROLLBACK;`。 4. **处理错误**: 最后,记得检查脚本执行的结果,如果需要处理错误,可以添加条件判断或捕获异常。 **完整示例**: ```bash #!/bin/bash # 设置环境变量 export PGPASSWORD=mysecretpassword DB_NAME=mydatabase DB_USER=myusername # 连接到数据库 echo "Connecting to $DB_NAME..." psql -U $DB_USER -d $DB_NAME # 检查是否成功连接 if [ $? -ne 0 ]; then echo "Failed to connect. Exiting." exit 1 fi # 开始事务 echo "Starting transaction..." pg_ctl -D /usr/local/pgsql/data -m fast -w start &> /dev/null & sleep 5 # 读取执行 SQL 脚本 echo "Running update script..." \i update_script.sql # 检查脚本执行结果 if [ $? -eq 0 ]; then echo "Update successful. Committing transaction..." \c else echo "Error occurred during update. Rolling back..." \rollback fi # 关闭数据库 echo "Stopping the database..." pg_ctl stop -D /usr/local/pgsql/data -m immediate &> /dev/null # 清理进程 wait ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值