在postgresql中通过命令行执行sql文件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在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, view, 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
[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
[引]/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成功
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

如有错误或未考虑完全的地⽅,望不吝赐教。

相关文档
最新文档