PostgreSQL-角色、庫、模式、表


  由於不了解postgresql的psql工具,安裝完數據庫后就直接用pgadmin或navicat來連接操作,在確認初始化后的庫中默認有些什么東西后竟然一直無處下手,在還沒有了解pg大致體系的情況下搞得一頭霧水,先不說數據庫角色(role)的那個既可以是用戶又可以是組的概念,總是苦於無法查詢當前操作的是哪個庫哪個表,哪個模式的狀態,甚至連表結構都不知道怎么看。然后還是再花時間去學pg的基本要素,主要還是因為mysql的代入關系,兩者有相似的地方,但在管理體系上是不一樣的。最終還是先回歸到服務器端上,直接用psql來操作先,了解一下psql定義好的元命令,方便操作學習了解。

建新角色

create role chen createdb createrole login password '111111';

建新庫

create database yun owner chen;

切換角色,切換后提示符也從#變成了>,因為不是superuser

postgres=# \c - chen;
SSL連接 (加密:DHE-RSA-AES256-SHA,二進制位: 256)
您現在已經連線到數據庫 "postgres",用戶 "chen".

postgres=>     

切換庫

postgres=> \c yun;
SSL連接 (加密:DHE-RSA-AES256-SHA,二進制位: 256)
您現在已經連線到數據庫 "yun",用戶 "chen".

yun=>

新建模式

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模式里,建個新表

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();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM