在 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