PostgreSQL 数据库操作

Posted onetoinf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PostgreSQL 数据库操作相关的知识,希望对你有一定的参考价值。

创建数据库

CREATE DATABASE name
    [ [ WITH ] 
           [ OWNER [=] user_name ]
           [ TEMPLATE [=] template ]
           [ ENCODING [=] encoding ]
           [ LC_COLLATE [=] lc_collate ]
           [ LC_CTYPE [=] lc_ctype ]
           [ TABLESPACE [=] tablespace_name ]
           [ CONNECTION LIMIT [=] connlimit ] ]

参数

  • name

要创建的数据库名字。最好用双引号包起来,以区分大小写。

  • user_name

数据库用户的名字,他将是新数据库的所有者,或者是使用DEFAULT选项来指定当前缺省用户(也就是执行命令的用户)。 要创建一个其他角色所有的数据库,你必须是那个角色的直接或间接的成员,或者是超级用户。

  • template

模板名,即从哪个模板创建新数据库,或者使用DEFAULT选项来指定缺省模板(template1)。

  • encoding

创建新数据库使用的字符编码。 可以使用文本名字(例如‘SQL_ASCII‘)、整数编号或是DEFAULT选项来指定(模版数据库的编码)。

  • lc_collate

用于新数据库的排序规则(LC_COLLATE)。 这影响到应用对字符串的排序顺序,例如:在有ORDER BY的查询中,以及用于文本列的索引的顺序。 在默认情况下,使用模板数据库的排序规则。 请看以下附加的限制。

  • lc_ctype

用于新数据库的字符分类(LC_CTYPE)。 这影响字符的分类,例如: 小写、大写和数字。 默认情况下使用模板数据库的字符分类。 请看以下附加的限制。

  • tablespace_name

和新数据库关联的表空间名字, 或者使用DEFAULT选项表示使用模版数据库的表空间。 这个表空间将成为在这个数据库里创建的对象的缺省表空间。

  • connlimit

数据库可以接受多少并发的连接。-1(缺省)意味着没有限制。

可选参数可以按任意顺序书写,而不仅仅是上面显示的顺序。

实例

CREATE DATABASE "myDb"
    WITH 
    OWNER = postgres
    ENCODING = 'UTF8'
    CONNECTION LIMIT = -1;

psql中不支持多行,所以将上述SQL保存至一个sql文件中,在psql中执行\i FQ.sql即可执行多行的SQL如下:

postgres=# \i FQ.sql
CREATE DATABASE
postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 myDb      | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

事项

如果你看到类似下面这样的信息:

createdb: command not found

那么就是PostgreSQL没有安装好:要么是就根本没装上、要么是搜索路径没有包含它。 尝试用绝对路径调用该命令试试:

$ /usr/local/pgsql/bin/createdb mydb

在你的节点上这个路径可能不一样。请和管理员联系或者看看安装指导以获取正确的位置。

另外一种响应可能是这样:

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预期的地方启动。同样, 你也要检查安装指导或者找管理员。

另外一个响应可能是这样:

createdb: could not connect to database postgres: FATAL:  role "joe" does not exist

在这里提到了你自己的登陆名。如果管理员没有为你创建PostgreSQL 用户帐号,就会发生这些现像。

如果你有个数据库用户帐号,但是没有创建数据库所需要的权限,那么你会看到下面的东西:

createdb: database creation failed: ERROR:  permission denied to create database

并非所有用户都经过了创建新数据库的授权。如果PostgreSQL 拒绝为你创建数据库,那么你需要让站点管理员赋予你创建数据库的权限。出现这种情况时 请咨询你的站点管理员。如果你自己安装了PostgreSQL,那么你应该以你启动数据库服务器的用户身份登陆然后参考手册完成权限的赋予工作。

你还可以用其它名字创建数据库。PostgreSQL允许你在 一个节点上创建任意数量的数据库。数据库名必须是以字母开头并且小于 63 个字节 长。一个方便的做法是创建和你当前用户名同名的数据库。许多工具假设它为缺省的 数据库名,所以这样可以节省敲键。要创建这样的数据库,只需要键入:

$ createdb

切换数据库

  • 在psql使用\l列出数据库,使用\c切换数据库
postgres-# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 myDb      | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

postgres-# \c "myDb"
Password for user postgres: 
You are now connected to database "myDb" as user "postgres".
myDb-# 
  • 也可以在使用psql命令时使用参数-d指定数据库名字
[PostgresFile] psql -U postgres -W -d "myDb"                                      
Password for user postgres:
psql (9.5.11
Type "help" for help

myDb=#

删除数据库

DROP DATABASE [ IF EXISTS ] name

DROP DATABASE删除一个数据库。删除一个现存数据库的目录入口并且删除包含数据的目录。 只有数据库所有者能够执行这条命令。还有,如果你或者任何其他人正在与目标数据库连接, 那么就不能执行这条命令。所以要与postgres或者任何其它数据库连接,再发出这条命令。DROP DATABASE不能撤销,小心使用!

参数

  • IF EXISTS

如果指定的数据库不存在,那么发出一个 notice 而不是抛出一个错误。

myDb=# DROP DATABASE IF EXISTS "myDb";
ERROR:  cannot drop the currently open database
myDb=# \c postgres
Password for user postgres: 
You are now connected to database "postgres" as user "postgres".
postgres=# DROP DATABASE IF EXISTS "myDb";
DROP DATABASE
postgres=#

可以看到当前数据库为myDb时是不能进行删除操作的。

以上是关于PostgreSQL 数据库操作的主要内容,如果未能解决你的问题,请参考以下文章

freecplus框架-PostgreSQL数据库操作

VSCode自定义代码片段——git命令操作一个完整流程

PostgreSQL之SQL操作符介绍及实践

PostgreSQL之SQL操作符介绍及实践

PostgreSQL连接python,postgresql在python 连接,创建表,创建表内容,插入操作,选择操作,更新操作,删除操作。

VSCode自定义代码片段15——git命令操作一个完整流程