+ -
当前位置:首页 → 问答吧 → 关于模式的两个问题【已试验解决】

关于模式的两个问题【已试验解决】

时间:2010-09-27

来源:互联网

本帖最后由 大红机器 于 2010-09-27 15:13 编辑

问题一:如何查看指定模式下的对象?
  1. \dt[S+] [模式]     列出表
复制代码
我建立了一个叫mysch的模式,并且在这个模式下建立了一个表tt

然后使用\dt mysch却看不到

原来什么都看不到
  1. postgres=# \dt
  2. No relations found.
复制代码
修改search_path
  1. postgres=# set search_path to mysch,"$user",public;
  2. SET
  3. postgres=# show search_path;
  4.       search_path      
  5. ------------------------
  6. mysch, "$user", public
  7. (1 row)
复制代码
可以看到了
  1. postgres=# \dt
  2.         List of relations
  3. Schema | Name | Type  |  Owner   
  4. --------+------+-------+----------
  5. mysch  | tt   | table | postgres
  6. (1 row)
复制代码
但是\dt mysch看不到
  1. postgres=# \dt mysch
  2. No matching relations found.
复制代码
然后我又在public下建立了同名表tt
  1. postgres=# create table public.tt(x varchar(8));
  2. CREATE TABLE
复制代码
这时又出现问题了:

用\dt发现public模式下的tt表看不到了……
  1. postgres=# \dt
  2.         List of relations
  3. Schema | Name | Type  |  Owner   
  4. --------+------+-------+----------
  5. mysch  | tt   | table | postgres
  6. (1 row)
复制代码
查看mysch下的tt,可以查询
  1. postgres=# select * from tt;
  2. x
  3. ---
  4. (0 rows)
复制代码
插入数据到public.tt
  1. postgres=# insert into public.tt values(5);
  2. INSERT 0 1
复制代码
查看mysch.tt,没有数据
  1. postgres=# select * from tt;
  2. x
  3. ---
  4. (0 rows)
复制代码
查看public.tt,数据已经插入成功
  1. postgres=# select * from public.tt;
  2. x
  3. ---
  4. 5
  5. (1 row)
复制代码
晕了,求高手解惑

作者: 大红机器   发布时间: 2010-09-27

又添加了一个模式tst,建立同名表tt,发现也看不到

把search_path中顺序改变一下,将tst放在前面,就显示tst的tt表了,mysch和public又消失了……

结论:看起来如果表同名,只显示search_path中第一个模式的表,不同名的则完全显示

作者: 大红机器   发布时间: 2010-09-27

第一个问题也试验出来了
  1. \dt mysch.
复制代码
原来要加个点

作者: 大红机器   发布时间: 2010-09-27