PostgreSQL
鉴于网上PostgreSQL的资料看的让人头疼,所以想象中,这是一篇比较全面的PostgreSQL教程。我会尽量去写的详细全面易读易懂一点,也只能是尽力而为。为了方便,在后面的书写中,我会用pgsql表示PostgreSQL,理解一下打字困难户,能偷懒就偷个懒啦。
我写的内容都来自pgsql的官网,英语好的同学不妨去做做阅读理解。英语不好的同学,下面这个是给你们准备的。
本篇的环境是Window7 + PostgreSQL 10。
入门
架构基础
行话:pgsql使用了客户端/服务器模式。一个pgsql会话包含包含两个进程:
服务器进程。管理数据库文件,接收客户端程序的连接请求,代表客户端执行数据库操作。数据库服务器程序叫做
postgres
。客户端应用程序。进行数据库操作。客户端应用程序本质上可以非常多样化,一个客户端可以是一个面向文本的工具,一个图形界面应用程序,一个通过访问数据库来显示网页的web服务器,或者一个专门的数据库维护工具。有些是pgsql自带的,大部分是用户开发的。
客户端和服务器可以在不同的主机上,通过TCP/IP连接通信。记住这一点很重要,因为客户机上的文件再服务器上可能是访问不到的,或者只能换个文件名访问。
pgsql服务器可以处理多并发的连接,它会为每个连接fork一个新的进程。客户端和新的服务器进程的通信与就服务器进程没有关系。主服务器进程会一直保持运行,等待客户端连接。
创建数据库
创建数据库可以检查你是否连接到了服务器。一个pgsql服务器可以管理很多数据库。
创建一个名为
mydb
的数据库:
$ createdb mydb
如果回车之后没有任何输出,说明创建数据库成功。你可以跳过本节了。
万一不幸出错了,这里给出了一些解决办法。
1. 找不到命令,错误如下:
createdb: command not found
说明pgsql的bin目录没有添加到环境变量。你可以选择将bin目录添加到环境变量,或者去bin目录下打开命令窗口,再或者使用绝对路径调用
createdb
命令。
$ /user/local/pgsql/bin/createdb mydb
建议添加还是添加环境变量,一劳永逸。
2. 服务未启动,错误如下:
createdb: could not connect to database postgres: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
表示服务器未启动,至少是在
createdb
执行的时候还未启动。多试试吧,我也不知道该咋办。
3. 没有账户,错误如下:
createdb: could not connect to database postgres: FATAL: role "joe" does not exist
这里joe是操作系统账户,pgsql用户账户与操作系统账户不同。你需要登录Postgres账户,创建一个用户账户。也可能是你被分配的pgsql账户名与操作系统用户名不同,这时,你可以使用
-U
选项指定账户或设置
PGUSER
环境变量来指定pgsql的用户名。
$ createdb -U user mydb
其中,user就是你的pgsql账户名。
4. 权限不足,错误如下:
createdb: database creation failed: ERROR: permission denied to create database
这是你的账户没有创建数据库的权限,你可以登录管理员账户进行修改。
pgsql允许创建任意数量的数据库。数据库名称必须以英文字母开头,且不超过63字节。
可以省略数据库名,创建与当前用户同名的数据库,如下:
$ createdb
删除数据库用
dropdb
命令:
$ dropdb mydb
dropdb
命令必须指定数据库名称,即使是与用户名同名的数据库也必须指定,它不会默认用账户名。它会删除与数据库相关联的所有文件,并且不能撤销,所以一定要三思而行。
访问数据库
有三种方式可以访问数据库:
pgsql终端,
psql
命令行工具;pgAdmin或支持ODBC或JDBC的office套件;编程语言API。
这里只介绍第一种方式,第二种方式不做介绍,第三种方式后面再说。
打开cmd(或PowerShell)命令行窗口,希望你之前已经设置过环境 变量了。输入一下命令启动
psql
:
$ psql mydb
mydb
就是之前创建的数据库。如果不指定数据库名称,默认会访问与当前账户名同名的数据库。
回车后输入密码,你会得到如下输出:
x psql (10.4)Type "help" for help.mydb=>
mydb=>
就是命令提示符,你可以输入SQL指令(以;结尾)或psql命令(以\开头)。
如果命令提示符是
mydb=#
,表示当前账户是超级用户。
你可以输入以下几个命令试试:
mydb=> SELECT version();
mydb=> SELECT current_date;
mydb=> SELECT 2 + 2;
上面三个命令都是SQL命令,它们都以
;
结尾。
psql内部命令都以
\
开头。例如
\h
命令可以获取帮助,
\q
命令用来退出psql。
mydb=> \h
mydb=> \q
psql与cmd
pgsql安装后会默认安装两个工具,pgAdmin和SQL Shell(psql)。前者是图形界面工具,后者是命令行工具。在打开psql之后首先需要登录账户,然后才能使用。
1. 双击打开psql。
2. 按照提示一次输入服务器地址(本地使用127.0.0.1),数据库名字,端口号(默认5432),账户名,密码。
3. 回车之后就可以登录到你的数据库,注意,输入密码是不会有任何显示的。
现在你可以输入SQL命令或psql命令来操作数据库了。pgsql也提供了许多命令可以通过cmd运行,比如前面讲的createdb命令。pgsql安装默认不会将bin目录写到环境变量,因此为了使用方便,我们可以自行这样做。在cmd中运行psql同样简单,只需要打开cmd然后输入相应的命令即可,前提是你已经设置了环境变量。本节所讲操作就是在cmd中进行的。
前面以说过,
-U
选项用来指定pgsql账户,psql命令启动psql。输入密码后即可进入psql。这与直接使用pgsql提供的SQL Shell效果是一样的。
好了,入门就入到这里了。下一期是SQL语言的简介。