在postgresql中通過命令列執行sql檔案
通過命令列執行初始化sql指令碼是比較常見的需求,命令列下執行如下操作即可:
若是執行的命名只是建立使用者,編輯使用者,建立資料庫的話可以不指定-d引數。
psql -U username -d myDataBase -a -f init.sql
如果是遠端資料庫加入-h引數指定主機地址即可
psql -h host -U username -d myDataBase -a -f init.sql
補充:PostgreSQL操作-psql基本命令
一、建立資料庫連線
接入PostgreSQL資料庫: psql -h IP地址 -p 埠 -U 資料庫名
之後會要求輸入資料庫密碼
二、訪問資料庫
1、列舉資料庫:\l
2、選擇資料庫:\c 資料庫名
3、檢視該某個庫中的所有表:\dt
4、切換資料庫:\c interface
5、檢視某個庫中的某個表結構:\d 表名
6、檢視某個庫中某個表的記錄:select * from apps limit 1;
7、顯示字符集:\encoding
8、退出psgl:\q
列出當前資料庫所有表
\dt
列出表名
SELECT tablename FROM pg_tables; WHERE tablename NOT LIKE 'pg%' AND tablename NOT LIKE 'sql_%' ORDER BY tablename;
列出資料庫名
\l
或
SELECT datname FROM pg_database;
切換資料庫
\c 資料庫名
1、通過命令列查詢
\d 資料庫 —— 得到所有表的名字
\d 表名 —— 得到表結構
2、通過SQL語句查詢
"select * from pg_tables"
—— 得到當前db中所有表的資訊(這裡pg_tables是系統檢視)
"select tablename from pg_tables where schemaname='public'"
—— 得到所有使用者自定義表的名字(這裡"tablename"欄位是表的名字,"schemaname"是schema的名字。使用者自定義的表,如果未經特殊處理,預設都是放在名為public的schema下)
General \copyright show PostgreSQL usage and distribution terms \g [FILE] or ; execute query (and send results to file or |pipe) \h [NAME] help on syntax of SQL commands,* for all commands \q quit psql Query Buffer \e [FILE] [LINE] edit the query buffer (or file) with external editor \ef [FUNCNAME [LINE]] edit function definition with external editor \p show the contents of the query buffer \r reset (clear) the query buffer \s [FILE] display history or save it to file \w FILE write query buffer to file Input/Output \copy ... perform SQL COPY with data stream to the client host \echo [STRING] write string to standard output \i FILE execute commands from file \o [FILE] send all query results to file or |pipe \qecho [STRING] write string to query output stream (see \o) Informational (options: S = show system objects,+ = additional detail) \d[S+] list tables,views,and sequences \d[S+] NAME describe table,view,sequence,or index \da[S] [PATTERN] list aggregates \db[+] [PATTERN] list tablespaces \dc[S] [PATTERN] list conversions \dC [PATTERN] list casts \dd[S] [PATTERN] show comments on objects \ddp [PATTERN] list default privileges \dD[S] [PATTERN] list domains \det[+] [PATTERN] list foreign tables \des[+] [PATTERN] list foreign servers \deu[+] [PATTERN] list user mappings \dew[+] [PATTERN] list foreign-data wrappers \df[antw][S+] [PATRN] list [only agg/normal/trigger/window] functions \dF[+] [PATTERN] list text search configurations \dFd[+] [PATTERN] list text search dictionaries \dFp[+] [PATTERN] list text search parsers \dFt[+] [PATTERN] list text search templates \dg[+] [PATTERN] list roles \di[S+] [PATTERN] list indexes \dl list large objects,same as \lo_list \dL[S+] [PATTERN] list procedural languages \dn[S+] [PATTERN] list schemas \do[S] [PATTERN] list operators \dO[S+] [PATTERN] list collations \dp [PATTERN] list table,and sequence access privileges \drds [PATRN1 [PATRN2]] list per-database role settings \ds[S+] [PATTERN] list sequences \dt[S+] [PATTERN] list tables \dT[S+] [PATTERN] list data types \du[+] [PATTERN] list roles \dv[S+] [PATTERN] list views \dE[S+] [PATTERN] list foreign tables \dx[+] [PATTERN] list extensions \l[+] list all databases \sf[+] FUNCNAME show a function's definition \z [PATTERN] same as \dp Formatting \a toggle between unaligned and aligned output mode \C [STRING] set table title,or unset if none \f [STRING] show or set field separator for unaligned query output \H toggle HTML output mode (currently off) \pset NAME [VALUE] set table output option (NAME := {format|border|expanded|fieldsep|footer|null| numericlocale|recordsep|tuples_only|title|tableattr|pager}) \t [on|off] show only rows (currently off) \T [STRING] set HTML <table> tag attributes,or unset if none \x [on|off] toggle expanded output (currently off) Connection \c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo} connect to new database (currently "postgres") \encoding [ENCODING] show or set client encoding \password [USERNAME] securely change the password for a user \conninfo display information about current connection Operating System \cd [DIR] change the current working directory \timing [on|off] toggle timing of commands (currently off) \! [COMMAND] execute command in shell or start interactive shell Variables \prompt [TEXT] NAME prompt user to set internal variable \set [NAME [VALUE]] set internal variable,or list all if no parameters \unset NAME unset (delete) internal variable Large Objects \lo_export LOBOID FILE \lo_import FILE [COMMENT] \lo_list \lo_unlink LOBOID large object operations
postgresql資料管理系統使用命令方式有兩種:
1. 內部命令,以反斜線開始 \,如: \l 顯示所有資料庫
2. 標準SQL命令,以分號 ; 或 \g 結束,可以使用多行
資料庫的關鍵操作:
1. 啟動服務 2. 登入 3. 建立資料庫 4. 建立表 5. 插入記錄到表中
6. 更新/刪除/查詢/修改操作 7. 退出 8. 停止服務
在windows7中安裝的postgresql預設使用GBK字符集,經常不能使用顯示中文的資料表,解決辦法:
注意:在windows 7下的postgresql中寫操作時要使用GBK,讀操作時要用UTF8;
設定字符集為 utf-8 就可以了.
postgres=# \encoding utf-8 // 設定客戶端的字元集 postgres=# \encoding // 顯示客戶端的字元集 postgres=# show client_encoding; // 顯示客戶端的字元集 postgres=# show server_encoding; // 顯示伺服器的字元集
啟動服務:
net start postgresql-9.5
停止服務:
net stop postgresql-9.5
獲取命令幫助:
c:\> psql --help
登入( 注意: postgres 是預設使用者即管理員 ):
路徑 psql -h 伺服器 -U 使用者名稱 -d 資料庫 -p 埠地址 // -U 是大寫 C:\> psql -h localhost -U postgres -p 5432 // 預設開啟postgres資料庫 C:\> psql -h 127.0.0.1 -U postgres -d fengdos -p 5432 // 開啟fengdos資料庫 C:\> psql -U postgres // 快速登入(全部使用預設設定) // 使用某些有密碼的使用者的情況下,會提示輸入密碼. 使用者 postgres 的口令: ILoveYou // 輸入時不會顯示任何字元 // 成功後顯示: psql (9.5.3) 輸入 "help" 來獲取幫助資訊. // 進入postgresql資料庫系統提示符狀態,******=# 中=#前面為當前使用的資料庫 postgres=# help // 獲取系統幫助,顯示如下:
您正在使用psql,這是一種用於訪問PostgreSQL的命令列介面
鍵入:
\copyright
顯示發行條款
\h
顯示 SQL 命令的說明
\?
顯示 pgsql 命令的說明 (pgsql內部命令)
\g
或者以分號(;)結尾以執行查詢
\q
退出注: 資料庫名稱區分大小寫的。
postgres=# \help // 獲取SQL命令的幫助,同 \h postgres=# \quit // 退出,同 \q postgres=# \password dlf // 重新設定使用者dlf的密碼,然後需要 \q退出後才生效 c:\>psql exampledb < user.sql // 將user.sql檔案匯入到exampled資料庫中 postgres=# \h select // 精細顯示SQL命令中的select命令的使用方法 postgres=# \l // 顯示所有資料庫 postgres=# \dt // 顯示當前資料庫中的所有表 postgres=# \d [table_name] // 顯示當前資料庫的指定表的表結構 postgres=# \c [database_name] // 切換到指定資料庫,相當於use postgres=# \du // 顯示所有使用者 postgres=# \conninfo // 顯示當前資料庫和連線資訊 postgres=# \e // 進入記事本sql指令碼編輯狀態(輸入批命令後關閉將自動在命令列中執行) postgres=# \di // 檢視索引(要建立關聯) postgres=# \prompt [文字] 名稱 // 提示使用者設定內部變數 postgres=# \encoding [字元編碼名稱] // 顯示或設定使用者端字元編碼 *可以將儲存過程寫在文字檔案中aaa.sql,然後在psql狀態下: postgres=# \i aaa.sql // 將aaa.sql匯入(到當前資料庫) postgres=# \df // 檢視所有儲存過程(函式) postgres=# \df+ name // 檢視某一儲存過程 postgres=# select version(); // 獲取版本資訊 postgres=# select usename from pg_user; // 獲取系統使用者資訊 postgres=# drop User 使用者名稱 // 刪除使用者
其它SQL命令通用如(標準化SQL語句):
*建立資料庫:
create database [資料庫名];
*刪除資料庫:
drop database [資料庫名];
*建立表:
create table ([欄位名1] [型別1] ;,[欄位名2] [型別2],......<,primary key (欄位名m,欄位名n,...)>;);
*在表中插入資料:
insert into 表名 ([欄位名m],[欄位名n],......) values ([列m的值],[列n的值],......);
*顯示錶內容:
select * from student;
*重新命名一個表:
alter table [表名A] rename to [表名B];
*刪除一個表:
drop table [表名];
*在已有的表裡新增欄位:
alter table [表名] add column [欄位名] [型別];
*刪除表中的欄位:
alter table [表名] drop column [欄位名];
*重新命名一個欄位:
alter table [表名] rename column [欄位名A] to [欄位名B];
*給一個欄位設定預設值:
alter table [表名] alter column [欄位名] set default [新的預設值];
*去除預設值:
alter table [表名] alter column [欄位名] drop default;
*修改表中的某行某列的資料:
update [表名] set [目標欄位名]=[目標值] where [該行特徵];
*刪除表中某行資料:
delete from [表名] where [該行特徵]; delete from [表名]; // 刪空整個表
*可以使用pg_dump和pg_dumpall來完成。比如備份sales資料庫:
pg_dump drupal>/opt/Postgresql/backup/1.bak
1.列出所有表名的查詢語句
SELECT tablename FROM pg_tables WHERE tablename NOT LIKE 'pg%' AND tablename NOT LIKE 'sql_%' ORDER BY tablename;
2.列出表中所有的資料
SELECT * FROM someTable;
3.執行外部指令碼
#/opt/PostgreSQL/8. 3/bin/psql - Upostgres ;登陸到資料庫的控制檯介面 postgres= # \i /root/db. sql \i 命令用於執行一個外部的sql指令碼檔案。
4.匯出資料庫為外部的指令碼
#/opt/PostgreSQL/8. 3/bin/ pg_dump - Upostgres - C - fdb. sql database -C create -f 是匯出後的檔名
5.postgresql 插入16進位制數
INSERT INTO tableAAA VALUES( x'0001f' : : integer,'鑑權','Authority' )
6.使用 TG_RELNAME 報錯ERROR: syntax error at or near "$1" at character
[引]http://www.dbmonster.com/Uwe/Forum.aspx/postgresql/2051/TG-RELNAME-problem Perhaps you will get some idea if you read the document: 37. 6. 4. Executing Dynamic Commands
改:執行動態語句
EXECUTE 'INSERT INTO TG_RELNAME VALUES (NEW.start_time,NEW.id,NEW.end_time)';
7. psql 常用命令
a. \c tesdb1 - - 將當前連線的testdb資料庫改變成 testdb1 。 b . \q - - 斷開與Postgres伺服器的連線 c . \l 列出所有資料庫的名字 \l+ 列出所有資料庫的名字以及字符集編碼 d. \d [ 名字] 描述表,索引,序列,或者檢視 列出表/索引/序列/檢視/系統表 \d{t| i| s| v| S} [ 模式] ( 加 "+" 獲取更多資訊) - - 列出表/索引/序列/檢視/系統表 \d tablename - - 查看錶的結構 \dt - - 列出資料庫中所有表
8.在PostgreSQL中如何刪除重複記錄
在PostgreSQL中刪除重複記錄其實很簡單,不論有多少行重複,只要在要刪除重複記錄的表中table加一列rownum欄位( id為table表中的主鍵) ,型別設定為serial型別即可,然後執行sql
delete from deltest where rownum not in( select max(rownum) from deltest );
最後刪除列rownum即可
正文:
連線資料庫操作:
psql是postgresql資料庫提供的連線資料庫shell命令,格式 psql 【option】 dbname
在終端輸入psql 會使用預設的方式連線本地資料庫,使用的使用者名稱是登陸linux系統使用的使用者名稱,
psql -U username -W pass 以及psql -U username -W pass databasenaem都可以實現連線資料庫的功能,第一種方式是使用使用者名稱username密碼pass連線預設資料庫(具體連結那個資料庫還沒搞清 楚),第二種方式使用使用者名稱username密碼pass連線username資料庫。如果登入成功之後將顯示類似資訊
Welcome to psql 8.0.6,the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit
連線成功之後所有的命令都是使用”\“+ 字元或者word完成相應的功能。現將常用的幾個列車
\l
列出所有資料庫
\dt
列出連線資料庫中所有表
\di
列出連線資料庫中所有index
\dv
列出連線資料庫中所有view
\h
sql命令幫助
\?
\ 所有命令幫助
\q
退出連線
\d tablename
列出指定tablename的表結構
可以嘗試執行下面兩句sql
SELECT current_date SELECT version()
是不是nothing happened,這是因為postgresql資料庫要求必須使用;結尾否則不予執行,加上;之後就能看到結果了。
如果我們想建立資料庫怎麼辦呢?
我們知道createdb和dropdb可以建立和刪除資料庫,但是如果我們這個時候執行出現什麼問題呢?可以試一試,提示是個錯誤。
為什麼呢?
createdb和dropdb是shell指令碼,所以現在又兩種方式執行
(1).退出連線進入終端,輸入createdb test —U user -W pass 稍等提示建立資料庫成功
dropdb test —U user -W pass 提示drop成功
(2).在未退出連線中使用 \! createdb test —U user -W pass 稍等提示建立資料庫成功
\! dropdb test —U user -W pass 提示drop成功
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。