PostgreSQL模式理解

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:PostgreSQL模式理解

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

在PostgreSQL中schema和oracle中不一样,在oracle中schema基本上可以理解为user,但是在PostgreSQL中user和schema没有严格意义上的对应关系.
创建模式
这里可以看到使用u_xifenfei创建的schema就是属于该用户,默认的public schema属于postgres用户.

db_xifenfei=# \c
您现在已经连接到数据库 "db_xifenfei",用户 "u_xifenfei".
db_xifenfei=# create schema u_xifenfei;
CREATE SCHEMA
db_xifenfei=# \dn
      架构模式列表
    名称    |   拥有者
------------+------------
 public     | postgres
 u_xifenfei | u_xifenfei
(2 行记录)

数据库检索schema的顺序
默认情况下优先检索和用户名一致的schema,然后是public schema

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

测试schema的检索顺序
这里比较明显优先使用/找到的是u_xifenfei schema(和用户名匹配的schema),然后再是默认的public schema

db_xifenfei=# create table t_xifenfei as select * from pg_database;
SELECT 4
db_xifenfei=# select pg_relation_filepath('t_xifenfei');
            pg_relation_filepath
---------------------------------------------
 pg_tblspc/16406/PG_10_201707211/16407/16421
(1 行记录)
db_xifenfei=# select count(*) from t_xifenfei;
 count
-------
     4
(1 行记录)
db_xifenfei=# select schemaname,tablename,tableowner,tablespace
db_xifenfei-# from pg_tables where tableowner='u_xifenfei';
 schemaname |  tablename  | tableowner | tablespace
------------+-------------+------------+------------
 public     | t_xifenfei  | u_xifenfei |
 u_xifenfei | t_xifenfei  | u_xifenfei |
(3 行记录)
--public.t_xifenfei和public.t_xifenfei2昨天创建
db_xifenfei=# select count(*) from public.t_xifenfei;
  count
---------
 1310720
(1 行记录)
db_xifenfei=# drop table t_xifenfei;
DROP TABLE
db_xifenfei=# select count(*) from t_xifenfei;
  count
---------
 1310720
(1 行记录)