• 售前

  • 售后

热门帖子
入门百科

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

[复制链接]
lc泠辰 显示全部楼层 发表于 2021-10-26 13:21:37 |阅读模式 打印 上一主题 下一主题
通过下令行执行初始化sql脚本是比较常见的需求,下令行下执行如下操纵即可:
如果执行的定名只是创建用户,编辑用户,创建数据库的话可以不指定-d参数。
  1. psql -U username -d myDataBase -a -f init.sql
复制代码
假如是远程数据库加入-h参数指定主机地址即可
  1. 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
列出当前数据库全部表
  1. \dt
复制代码
列出表名
  1. SELECT tablename FROM pg_tables;
  2. WHERE tablename NOT LIKE 'pg%'
  3. AND tablename NOT LIKE 'sql_%'
  4. ORDER BY tablename;
复制代码
列出数据库名
  1. \l
复制代码
  1. SELECT datname FROM pg_database;
复制代码
切换数据库
\c 数据库名
1、通过下令行查询
\d 数据库 —— 得到全部表的名字
\d 表名 —— 得到表结构
2、通过SQL语句查询
  1. "select * from pg_tables"
复制代码
—— 得到当前db中全部表的信息(这里pg_tables是系统视图)
  1. "select tablename from pg_tables where schemaname='public'"
复制代码
—— 得到全部用户自定义表的名字(这里"tablename"字段是表的名字,"schemaname"是schema的名字。用户自定义的表,假如未经特殊处理惩罚,默认都是放在名为public的schema下)
  1. General
  2. \copyright    show PostgreSQL usage and distribution terms
  3. \g [FILE] or ;   execute query (and send results to file or |pipe)
  4. \h [NAME]    help on syntax of SQL commands, * for all commands
  5. \q      quit psql
  6. Query Buffer
  7. \e [FILE] [LINE]  edit the query buffer (or file) with external editor
  8. \ef [FUNCNAME [LINE]] edit function definition with external editor
  9. \p      show the contents of the query buffer
  10. \r      reset (clear) the query buffer
  11. \s [FILE]    display history or save it to file
  12. \w FILE    write query buffer to file
  13. Input/Output
  14. \copy ...    perform SQL COPY with data stream to the client host
  15. \echo [STRING]   write string to standard output
  16. \i FILE    execute commands from file
  17. \o [FILE]    send all query results to file or |pipe
  18. \qecho [STRING]  write string to query output stream (see \o)
  19. Informational
  20. (options: S = show system objects, + = additional detail)
  21. \d[S+]     list tables, views, and sequences
  22. \d[S+] NAME   describe table, view, sequence, or index
  23. \da[S] [PATTERN]  list aggregates
  24. \db[+] [PATTERN]  list tablespaces
  25. \dc[S] [PATTERN]  list conversions
  26. \dC  [PATTERN]  list casts
  27. \dd[S] [PATTERN]  show comments on objects
  28. \ddp [PATTERN]  list default privileges
  29. \dD[S] [PATTERN]  list domains
  30. \det[+] [PATTERN]  list foreign tables
  31. \des[+] [PATTERN]  list foreign servers
  32. \deu[+] [PATTERN]  list user mappings
  33. \dew[+] [PATTERN]  list foreign-data wrappers
  34. \df[antw][S+] [PATRN] list [only agg/normal/trigger/window] functions
  35. \dF[+] [PATTERN]  list text search configurations
  36. \dFd[+] [PATTERN]  list text search dictionaries
  37. \dFp[+] [PATTERN]  list text search parsers
  38. \dFt[+] [PATTERN]  list text search templates
  39. \dg[+] [PATTERN]  list roles
  40. \di[S+] [PATTERN]  list indexes
  41. \dl     list large objects, same as \lo_list
  42. \dL[S+] [PATTERN]  list procedural languages
  43. \dn[S+] [PATTERN]  list schemas
  44. \do[S] [PATTERN]  list operators
  45. \dO[S+] [PATTERN]  list collations
  46. \dp  [PATTERN]  list table, view, and sequence access privileges
  47. \drds [PATRN1 [PATRN2]] list per-database role settings
  48. \ds[S+] [PATTERN]  list sequences
  49. \dt[S+] [PATTERN]  list tables
  50. \dT[S+] [PATTERN]  list data types
  51. \du[+] [PATTERN]  list roles
  52. \dv[S+] [PATTERN]  list views
  53. \dE[S+] [PATTERN]  list foreign tables
  54. \dx[+] [PATTERN]  list extensions
  55. \l[+]     list all databases
  56. \sf[+] FUNCNAME  show a function's definition
  57. \z  [PATTERN]  same as \dp
  58. Formatting
  59. \a      toggle between unaligned and aligned output mode
  60. \C [STRING]   set table title, or unset if none
  61. \f [STRING]   show or set field separator for unaligned query output
  62. \H      toggle HTML output mode (currently off)
  63. \pset NAME [VALUE]  set table output option
  64.        (NAME := {format|border|expanded|fieldsep|footer|null|
  65.        numericlocale|recordsep|tuples_only|title|tableattr|pager})
  66. \t [on|off]   show only rows (currently off)
  67. \T [STRING]   set HTML <table> tag attributes, or unset if none
  68. \x [on|off]   toggle expanded output (currently off)
  69. Connection
  70. \c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}
  71.        connect to new database (currently "postgres")
  72. \encoding [ENCODING] show or set client encoding
  73. \password [USERNAME] securely change the password for a user
  74. \conninfo    display information about current connection
  75. Operating System
  76. \cd [DIR]    change the current working directory
  77. \timing [on|off]  toggle timing of commands (currently off)
  78. \! [COMMAND]   execute command in shell or start interactive shell
  79. Variables
  80. \prompt [TEXT] NAME prompt user to set internal variable
  81. \set [NAME [VALUE]] set internal variable, or list all if no parameters
  82. \unset NAME   unset (delete) internal variable
  83. Large Objects
  84. \lo_export LOBOID FILE
  85. \lo_import FILE [COMMENT]
  86. \lo_list
  87. \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 就可以了.
  1. postgres=# \encoding utf-8  // 设置客户端的字元集
  2. postgres=# \encoding     // 显示客户端的字元集
  3. postgres=# show client_encoding;  // 显示客户端的字元集
  4. postgres=# show server_encoding;  // 显示服务器的字元集
复制代码
启动服务:
  1. net start postgresql-9.5
复制代码
制止服务:
  1. net stop postgresql-9.5
复制代码
获取下令帮助:
  1. c:\> psql --help
复制代码
登录( 注意: postgres 是默认用户即管理员 ):
  1. 路径 psql -h 服务器 -U 用户名 -d 数据库 -p 端口地址 // -U 是大写
  2. C:\> psql -h localhost -U postgres -p 5432   // 默认打开postgres数据库
  3. C:\> psql -h 127.0.0.1 -U postgres -d fengdos -p 5432 // 打开fengdos数据库
  4. C:\> psql -U postgres         // 快速登录(全部使用默认设置)
  5. // 使用某些有密码的用户的情况下, 会提示输入密码.
  6. 用户 postgres 的口令: ILoveYou   // 输入时不会显示任何字符
  7. // 成功后显示:
  8. psql (9.5.3)
  9. 输入 "help" 来获取帮助信息.
  10. // 进入postgresql数据库系统提示符状态, ******=# 中=#前面为当前使用的数据库
  11. postgres=# help   // 获取系统帮助,显示如下:
复制代码
您正在使用psql, 这是一种用于访问PostgreSQL的下令行界面
键入:
  1. \copyright
复制代码
显示发行条款
  1. \h
复制代码
显示 SQL 下令的说明
  1. \?
复制代码
显示 pgsql 下令的说明 (pgsql内部下令)
  1. \g
复制代码
或者以分号(;)末了以执行查询
  1. \q
复制代码
退出注: 数据库名称区分巨细写的。
  1. postgres=# \help   // 获取SQL命令的帮助,同 \h
  2. postgres=# \quit   // 退出,同 \q
  3. postgres=# \password dlf // 重新设置用户dlf的密码,然后需要 \q退出后才生效
  4. c:\>psql exampledb < user.sql // 将user.sql文件导入到exampled数据库中
  5. postgres=# \h select // 精细显示SQL命令中的select命令的使用方法
  6. postgres=# \l   // 显示所有数据库
  7. postgres=# \dt   // 显示当前数据库中的所有表
  8. postgres=# \d [table_name] // 显示当前数据库的指定表的表结构
  9. postgres=# \c [database_name] // 切换到指定数据库,相当于use
  10. postgres=# \du     // 显示所有用户
  11. postgres=# \conninfo   // 显示当前数据库和连接信息
  12. postgres=# \e // 进入记事本sql脚本编辑状态(输入批命令后关闭将自动在命令行中执行)
  13. postgres=# \di // 查看索引(要建立关联)
  14. postgres=# \prompt [文本] 名称 // 提示用户设定内部变数
  15. postgres=# \encoding [字元编码名称] // 显示或设定用户端字元编码
  16. *可以将存储过程写在文本文件中aaa.sql,然后在psql状态下:
  17. postgres=# \i aaa.sql // 将aaa.sql导入(到当前数据库)
  18. postgres=# \df   // 查看所有存储过程(函数)
  19. postgres=# \df+ name  // 查看某一存储过程
  20. postgres=# select version();   // 获取版本信息
  21. postgres=# select usename from pg_user; // 获取系统用户信息
  22. postgres=# drop User 用户名    // 删除用户
复制代码
其它SQL下令通用如(标准化SQL语句):
*创建数据库:
  1. create database [数据库名];
复制代码
*删除数据库:
  1. drop database [数据库名];
复制代码
*创建表:
  1. create table ([字段名1] [类型1] ;,[字段名2] [类型2],......<,primary key (字段名m,字段名n,...)>;);
复制代码
*在表中插入数据:
  1. insert into 表名 ([字段名m],[字段名n],......) values ([列m的值],[列n的值],......);
复制代码
*显示表内容:
  1. select * from student;
复制代码
*重定名一个表:
  1. alter table [表名A] rename to [表名B];
复制代码
*删除一个表:
  1. drop table [表名];
复制代码
*在已有的表里添加字段:
  1. alter table [表名] add column [字段名] [类型];
复制代码
*删除表中的字段:
  1. alter table [表名] drop column [字段名];
复制代码
*重定名一个字段:
  1. alter table [表名] rename column [字段名A] to [字段名B];
复制代码
*给一个字段设置缺省值:
  1. alter table [表名] alter column [字段名] set default [新的默认值];
复制代码
*去除缺省值:
  1. alter table [表名] alter column [字段名] drop default;
复制代码
*修改表中的某行某列的数据:
  1. update [表名] set [目标字段名]=[目标值] where [该行特征];
复制代码
*删除表中某行数据:
  1. delete from [表名] where [该行特征];
  2. delete from [表名]; // 删空整个表
复制代码
*可以使用pg_dump和pg_dumpall来完成。好比备份sales数据库:
  1. pg_dump drupal>/opt/Postgresql/backup/1.bak
复制代码
1.列出全部表名的查询语句
  1. SELECT tablename FROM pg_tables
  2. WHERE tablename NOT LIKE 'pg%'
  3. AND tablename NOT LIKE 'sql_%'
  4. ORDER BY tablename;
复制代码
2.列出表中全部的数据
  1. SELECT * FROM someTable;
复制代码
3.执行外部脚本
  1. #/opt/PostgreSQL/8. 3/bin/psql - Upostgres ;登陆到数据库的控制台界面
  2. postgres= # \i /root/db. sql
  3.   \i 命令用于执行一个外部的sql脚本文件。
复制代码
4.导出数据库为外部的脚本
  1. #/opt/PostgreSQL/8. 3/bin/ pg_dump - Upostgres - C - fdb. sql database
  2. -C create -f 是导出后的文件名
复制代码
5.postgresql 插入16进制数
  1. INSERT INTO tableAAA VALUES( x'0001f' : : integer, '鉴权' , 'Authority' )
复制代码
6.使用 TG_RELNAME 报错ERROR: syntax error at or near "$1" at character
  1. [引]http://www.dbmonster.com/Uwe/Forum.aspx/postgresql/2051/TG-RELNAME-problem
  2. Perhaps you will get some idea if you read the document:
  3. 37. 6. 4. Executing Dynamic Commands
复制代码
改:执办法态语句
  1. EXECUTE 'INSERT INTO TG_RELNAME VALUES (NEW.start_time , NEW.id , NEW.end_time)';
复制代码
7. psql 常用下令
  1. a. \c tesdb1 - - 将当前连接的testdb数据库改变成 testdb1 。
  2. b . \q - - 断开与Postgres服务器的连接
  3. c . \l 列出所有数据库的名字
  4. \l+ 列出所有数据库的名字以及字符集编码
  5. d. \d [ 名字] 描述表, 索引, 序列, 或者视图
  6. 列出表/索引/序列/视图/系统表
  7. \d{t| i| s| v| S} [ 模式] ( 加 "+" 获取更多信息)
  8. - - 列出表/索引/序列/视图/系统表
  9. \d tablename - - 查看表的结构
  10. \dt - - 列出数据库中所有表
复制代码
8.在PostgreSQL中怎样删除重复记载
在PostgreSQL中删除重复记载其实很简单,不论有多少行重复,只要在要删除重复记载的表中table加一列rownum字段( id为table表中的主键) ,范例设置为serial范例即可,然后执行sql
  1. delete from deltest where rownum not in(
  2. select max(rownum) from deltest
  3. );
复制代码
最后删除列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数据库。假如登录乐成之后将显示雷同信息
  1. Welcome to psql 8.0.6, the PostgreSQL interactive terminal.
  2. Type: \copyright for distribution terms
  3.   \h for help with SQL commands
  4.   \? for help with psql commands
  5.   \g or terminate with semicolon to execute query
  6.   \q to quit
复制代码
连接乐成之后全部的下令都是使用”\“+ 字符或者word完成相应的功能。现将常用的几个列车
  1. \l
复制代码
列出全部数据库
  1. \dt
复制代码
列出连接数据库中全部表
  1. \di
复制代码
列出连接数据库中全部index
  1. \dv
复制代码
列出连接数据库中全部view
  1. \h
复制代码
sql下令帮助
  1. \?
复制代码
\ 全部下令帮助
  1. \q
复制代码
退出连接
  1. \d tablename
复制代码
列出指定tablename的表结构
可以实验执行下面两句sql
  1. SELECT current_date
  2. SELECT version()
复制代码
是不是nothing happened,这是由于postgresql数据库要求必须使用;末了否则不予执行,加上;之后就能看到结果了。
假如我们想创建数据库怎么办呢?
我们知道createdb和dropdb可以创建和删除数据库,但是假如我们这个时间执行出现什么标题呢?可以试一试,提示是个错误。
为什么呢?
createdb和dropdb是shell脚本,以是现在又两种方式执行
(1).退出连接进入终端,输入createdb test —U user -W pass 稍等提示创建数据库乐成
  1. dropdb test —U user -W pass 提示drop成功
复制代码
(2).在未退出连接中使用 \! createdb test —U user -W pass 稍等提示创建数据库乐成
  1. \! dropdb test —U user -W pass 提示drop成功
复制代码
以上为个人履历,渴望能给各人一个参考,也渴望各人多多支持草根技能分享。如有错误或未思量完全的地方,望不吝赐教。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作