在 PSQL 中运行 SQL 文件
Shihab Sikder
2023年2月6日
有时,你可能需要一次运行多个查询,例如 CRUD
操作。为此,很难使用命令行或终端正确编写 SQL 命令。
如果你知道查询,请将其写入文件并使用扩展名 .sql
保存。它定义文件内的内容是标准查询语言。
从命令行或终端运行 SQL 文件
你想创建一个表并将一些数据插入到表中。
CREATE TABLE BANK(
ID INT PRIMARY KEY,
BANK_NAME VARCHAR,
SWIFTCODE VARCHAR NOT NULL
);
CREATE TABLE ACCOUNT(
ID INT PRIMARY KEY,
ACCOUNT_NAME VARCHAR NOT NULL,
BANK_ID INT,
BALANCE INT DEFAULT 0,
CONSTRAINT fk_bank FOREIGN KEY(BANK_ID) REFERENCES BANK(ID)
);
INSERT INTO bank(ID, BANK_NAME,SWIFTCODE) VALUES(1,'State Bank','123456');
INSERT INTO bank(ID, BANK_NAME,SWIFTCODE) VALUES(2,'Central Bank','654321');
INSERT INTO Account(ID,ACCOUNT_NAME,BANK_ID,BALANCE) VALUES(1,'Jhon',1,500);
下面给出了运行此文件的格式。
psql -h <host_address> -d <database_name> -U "database_user" -p "port_no" -a -q -f "file_path"
标志 | 意义 |
---|---|
-h |
主机地址(默认为 Localhost ) |
-d |
数据库名称(默认数据库是 postgres ) |
-U |
用户名(默认用户名是 postgress ) |
-p |
端口号(默认端口为 5432 ) |
-a |
如果 SQL 有任何可打印内容,则打印所有内容 |
-f |
SQL 脚本的文件目录 |
在命令行中运行 SQL 脚本
C:\Users\Admin>psql -h localhost -d postgres -U postgres -p 5432 -a -q -f C:\Users\Admin\Desktop\script1.sql
Password for user postgres:
CREATE TABLE BANK(
ID INT PRIMARY KEY,
BANK_NAME VARCHAR,
SWIFTCODE VARCHAR NOT NULL
);
CREATE TABLE ACCOUNT(
ID INT PRIMARY KEY,
ACCOUNT_NAME VARCHAR NOT NULL,
BANK_ID INT,
BALANCE INT DEFAULT 0,
CONSTRAINT fk_bank FOREIGN KEY(BANK_ID) REFERENCES BANK(ID)
);
INSERT INTO bank(ID, BANK_NAME,SWIFTCODE) VALUES(1,'State Bank','123456');
INSERT INTO bank(ID, BANK_NAME,SWIFTCODE) VALUES(2,'Central Bank','654321');
INSERT INTO Account(ID,ACCOUNT_NAME,BANK_ID,BALANCE) VALUES(1,'Jhon',1,500);
从 PSQL Shell 检查
postgres=# \dt
List of relations
Schema | Name | Type | Owner
--------+----------+-------+----------
public | account | table | postgres
public | accounts | table | postgres
public | bank | table | postgres
public | logger | table | postgres
public | randoms | table | postgres
public | students | table | postgres
public | times | table | postgres
(7 rows)
postgres=#
从 PSQL Shell 运行 SQL 文件
此外,你可以从 psql shell 运行 SQL 脚本,如下所示:
postgres-# \i C:/Users/Admin/Desktop/script1.sql
CREATE TABLE
CREATE TABLE
INSERT 0 1
INSERT 0 1
INSERT 0 1
在这里,你可以看到已经创建了两个表,并且执行了三个插入命令。有时在 Windows 中,你可能会收到 Permission Denied
。
这基本上会发生在\i
之后的目录路径中的反斜杠上。
作者: Shihab Sikder