在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
 \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成功

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Postgresql的pl/pgql使用操作--将多条执行语句作为一个事务

    Postgresql的pl/pgql用法--将多条执行语句作为一个事务 DO $$ DECLARE v_id bigint; begin --1. INSERT INTO r_test_a (name, value, unit, mode, uid, create_ts) SELECT 't_t','','',2,0, extract(epoch from now())::bigint WHERE NOT EXISTS (SELECT id FROM r_test_a WHERE name =

  • 在postgreSQL中运行sql脚本和pg_restore命令方式

    今天踩坑了,把powerdesign生成的sql脚本文件,用pg_restore命令一直运行... 过程惨不忍睹,一直以为是编码问题,修改了serve和client的encoding,结果... 记录一下这个错误: postgreSQL运行sql脚本文件: psql -d dbname -U username -f (脚本所在位置).sql postgerSQL的pg_restore命令 用法: pg_restore [选项]- [文件名] 一般选项: -d, --dbname=名字 连接数据库

  • postgresql 启动与停止操作

    启动和停止数据库服务器 service 方式 service postgresql-10 start service postgresql-10 stop service postgresql-10 status pg_ctl 方式 pg_ctl start -D [ data 所在路径 ] pg_ctl stop -D [ data 所在路径 ] 三种形式:-m 指定模式 smart 模式:会等待活动的事务提交结束,并等待客户端主动断开连接之后关闭数据库服务 fast 模式:会回滚所有的活动的

  • Postgresql psql文件执行与批处理多个sql文件操作

    新建一个批处理文件batch.sql \encoding UTF8; \cd C:/Gmind/ddl \set ON_ERROR_STOP 1 \set ECHO all \timing on \i s_product.sql; \i s_branch.sql; \i s_comment.sql; \i s_class.sql; \i s_drawing.sql; \i s_dmemo.sql; \i s_form.sql; \encoding 设置客户端字符集编码(可选) \cd 切换目录.

  • 本地计算机上的 postgresql 服务启动后停止的问题解决

    在启动 postgresql 服务是遇到这种情况: 解决方法: 打开计算机管理====>查看应用程序日志信息,可以看出,由于日志配置错误的问题. 找到 postgresql.conf 文件,做如图修改,解决问题: postgresql 日志配置参考下面的补充部分: 总结: 遇到类似的问题可以采用同样的方式,多注意查看windows日志,找到错误源. 补充:EDB日志配置-慢sql记录分析 1.打开:/postgresql的安装目录/data/postgresql.conf 2.找到并更改以下属性

  • PostgreSQL upsert(插入更新)数据的操作详解

    本文介绍如何使用PostgreSQL upsert特性插入或当被插入数据已存在则更新数据. 1. 介绍PostgreSQL upsert 在关系型数据库中,upsert是一个组合词,即当往表中插入记录,如果该记录已存在则更新,否则插入新记录.为了使用该特性需要使用INSERT ON CONFLICT语句: INSERT INTO table_name(column_list) VALUES(value_list) ON CONFLICT target action; 该语法中target可以是下

  • postgresql 修改字段长度的操作

    使用数据库postgresql的时候,有时会遇到字段长度扩展的情况,由于之前已经有数据了,所以只能修改字段长度,不能通过删除再增加的方式. 可以使用如下方式进行 ALTER TABLE your_table_name alter COLUMN your_column_name type character varying(3000); 通过上面的一句话就可以把你的表中相应的字段的长度修改为3000. 补充:PostgreSQL字符类型长度变更的性能 背景 业务有时会遇到表中的字符型字段的长度不够

  • 在postgresql中运行sql文件并导出结果的操作

    方法一 在psql中运行 在终端进入用户test下的数据库testdb: $ psql -p 5432 -U test -d testdb 假设要执行的.sql文件叫做d1.sql,存放路径为:/mnt/hgfs/share/database/2.18.0_rc2/dbgen/queries/d1.sql,导出的文件叫做d1.out,存放的路径为:/mnt/hgfs/share/database/2.18.0_rc2/dbgen/queries/out/d1.out testdb=# \o /m

  • 在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数据库:

  • mysql命令行下执行sql文件的几种方法

    目录 第一种方法:未连接mysql数据库时 第二方法:在已经连接数据库的情况下,此时命令提示符为mysql>, 用MySQL的source命令导入SQL文件实战记录 达到目的:通过命令行的方式,将tsinfo180516.sql文件导入到数据库demo1中. 效果图 第一种方法:未连接mysql数据库时 在mysql命令行下执行sql文件 运行--cmd C:\Users\lenovo>mysql -u账号 -p密码 -D数据库名 < sql文件绝对路径 C:\Users\lenovo&

  • 命令行执行php脚本中的$argv和$argc配置方法

    在实际工作中有可能会碰到需要在nginx命令行执行php脚本的时候,当然你可以去配置一个conf用外网访问. 在nginx命令行中 使用 php index.php 就可以执行这个index.php脚本了,但是怎么传递参数呢?那就要用到$argv和$aegc了.不用开启什么设置 直接在脚本中使用,类似于http传值中的$_POST和$_GET.. 在index.php插入以下菜吗 <?php echo $argv[0]; echo "\n"; var_dump($argv[1])

  • MySQL从命令行导入SQL脚本时出现中文乱码的解决方法

    本文实例讲述了MySQL从命令行导入SQL脚本时出现中文乱码的解决方法.分享给大家供大家参考,具体如下: 在图形界面管理工具 MySql Query Browser中打开脚本(脚本包括建库.建表.添加数据),并执行,不会有任何问题:但是使用mysql命令行工具执行建库脚本时,添加数据中如果包含中文,存入的数据就是乱码或是???... 解决方法1:在MySql安装目录下找到my.ini,将[mysql]下的default-character-set=latin1改为default-characte

  • PHP命令行执行整合pathinfo模拟定时任务实例

    命令行模式下,根据传参,调用不同控制器.控制器中根据配置定时执行指定方法 Application.php <?php class Application{ public static function main(){ header("content-type:text/html;charset=utf-8"); self::register(); self::commandLine(); self::pathInfo(); } //自动加载 public static funct

  • sqlserver中通过osql/ocmd批处理批量执行sql文件的方法

    利用osql/ocmd批处理批量执行sql文件 注意:在上图中我们可以看到osql 并不支持 SQL Server 2008的所有功能,如果需要使用SQL Server 2008的所有功能可以使用ocmd命令. 有了osql/ocmd命令要批量执行sql文件当然需要写一个批处理命令,例如我们执行上面sql文件就可以在txt中编写下面的语句: 复制代码 代码如下: osql -S"127.0.0.1" -U"sa" -P"sa" -d"N

  • 基于命令行执行带参数的php脚本并取得参数的方法

    本文分析了基于命令行执行带参数的php脚本并取得参数的方法.分享给大家供大家参考,具体如下: 一.为什么我们要在命令行下运行php脚本呢? 个人理解,主要有二个原因: 1. 利用crontab去跑php,可以给服务器减压,当然在这里有一个条件,就是实时性要求不高.比如:sns中的好友动态,这个实时要求不高,但是数据量比较大,这个时候定时跑的话,会给web服务器,数据库服务器分担不小的压力. 2. 就是我们要定时去完成某一事情,比如:我要删除一个月前,用户留言,这个时候,写的php脚本在cront

  • 解决Python 命令行执行脚本时,提示导入的包找不到的问题

    在Pydev能正常执行的脚本,在导出后在命令行执行,通常会报自己写的包导入时找不到. 一:报错原因 在PyDev中,test.py 中导入TestUserCase里面的py文件时,会写: from TestUserCase.Test import Test 这在命Pydev中没错,但是在命令行中确出现错误. 因为在PyDev中默认路径除了当前文件所在路劲外,还有工程根路径.而在命令行中只有当前文件所在路径.TestUserCase是test.py文件的上一级目录,所以在命令行中test.py i

  • 使用 CliWrap 让C#中的命令行交互(推荐)

    在代码中进行命令行交互是一个很常见的场景, 特别是在一些CI CD 自动化流程中, 在这之前我们会使用 System.Diagnostics.Process API, 现在有一个更灵活的工具 CliWarp, 这是一个在 .NET 平台使用的命令行交互工具库, 通过在C# 中使用 Fluent 的API, 让命令行交互举重若轻. https://github.com/Tyrrrz/CliWrap 主要特性如下: 基于 System.Diagnostics.Process 简单, 流畅的 API

  • 使用 CliWrap 让C#中的命令行交互(推荐)

    在代码中进行命令行交互是一个很常见的场景, 特别是在一些CI CD 自动化流程中, 在这之前我们会使用 System.Diagnostics.Process API, 现在有一个更灵活的工具 CliWarp, 这是一个在 .NET 平台使用的命令行交互工具库, 通过在C# 中使用 Fluent 的API, 让命令行交互举重若轻. https://github.com/Tyrrrz/CliWrap 主要特性如下: 基于 System.Diagnostics.Process 简单, 流畅的 API

随机推荐