因爲不瞭解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();