PostgreSQL-角色、库、模式、表

  因为不了解postgresql的psql工具,安装完数据库后就直接用pgadmin或navicat来链接操做,在确认初始化后的库中默认有些什么东西后居然一直无处下手,在尚未了解pg大体体系的状况下搞得一头雾水,先不说数据库角色(role)的那个既能够是用户又能够是组的概念,老是苦于没法查询当前操做的是哪一个库哪一个表,哪一个模式的状态,甚至连表结构都不知道怎么看。而后仍是再花时间去学pg的基本要素,主要仍是由于mysql的代入关系,二者有类似的地方,但在管理体系上是不同的。最终仍是先回归到服务器端上,直接用psql来操做先,了解一下psql定义好的元命令,方便操做学习了解。html

建新角色mysql

create role chen createdb createrole login password '111111';

建新库web

create database yun owner chen;

切换角色,切换后提示符也从#变成了>,由于不是superusersql

postgres=# \c - chen;
SSL链接 (加密:DHE-RSA-AES256-SHA,二进制位: 256)
您如今已经连线到数据库 "postgres",用户 "chen".

postgres=>     

切换库数据库

postgres=> \c yun;
SSL链接 (加密:DHE-RSA-AES256-SHA,二进制位: 256)
您如今已经连线到数据库 "yun",用户 "chen".

yun=>

新建模式bash

create schema yun;

这里有一个新建表若不指定模式则默认放在哪个模式的问题,不一样模式下不一样的表能够重名,\d 命令也是从这里面的模式名来获取有哪些表 --模式的搜索路径服务器

yun=>show search_path;
  search_path
----------------
 "$user",public

yun=> set search_path to yun,"$user",public;
SET

yun=> show search_path;
     search_path      
----------------------
 yun, "$user", public
(1 行记录)

上面这种方法是临时的,像变量同样从新链接后会失效,而后就找来下面直接修改角色属性的方法,从新链接后永久有效工具

alter role chen set search_path to yun,"$user",public;

set好后,新表就会自动归在yun模式里,建个新表post

yun=> create table website(
yun(> fid int primary key,
yun(> name varchar(255) not null,
yun(> url varchar(255) not null,
yun(> style smallint not null)
yun-> ;

再用已经提早从mysql导出好的文件导入数据,copy命令须要superuser,可是psql提供了另外的方法来导数据学习

\copy website from '/var/lib/mysql/yun/src_data/allwebsite.dat' delimiter ',';

postgressql的copy中有一个csv格式,很方便统一导入和导出的间隔符和引号,不须要自定义,举个栗子:

\copy (select * from spam_keyword) to '/home/.../abcd.txt' csv
\copy spam_keyword from /home/.../spam_keyword.copy csv

copy 导入不会覆盖表内原有的数据,就是在新的行插入,默认在目标表的全部字段位置插入,若指定插入表的字段则只在该字段插入数据,因此<表的插入字段>和<源的字段>数量要一致,若表一共只有2个字段而copy源有3个那就没法导入,相反则只需指定表的插入字段如 \copy tablename(colunma,columnb) from ,且字段名并无关联。

修改一下website表,新加一个字段

alter table website add column tm_update timestamp(0) not null default now();
相关文章
相关标签/搜索