使用Psycopg2获取所有模式的名称

时间:2017-06-07 10:32:04

标签: python postgresql psycopg2

我正在尝试迭代Python中的Postgresql数据库的所有表,以在每个表中执行查询。我需要获取每个模式的模式和表名来执行查询,所以我想得到一个像这样的字符串列表:“schema.tablename”。

我已经使用了它,但它只列出了表的名称,所以没有用。

select relname from pg_class where relkind='r' and relname !~ '^(pg_|sql_)';

我确信必须有一个更简单的方法,但我一直在找一些没有成功的东西......

感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:1)

你想加入pg_namespace:

t=# select nspname||'.'||relname from pg_class join pg_namespace on relnamespace = pg_namespace.oid where relkind='r' and relname !~ '^(pg_|sql_)' limit 5;
     ?column?
-------------------
 public.s141
 public.events
 public.tg_rep_que
 public.t4
 public.menupoint
(5 rows)

答案 1 :(得分:1)

select
  relname,
  oid::regclass as full_name,
  relnamespace::regnamespace as schema_name
from pg_class
where relkind='r';

请注意,它不会将架构名称附加到search_path参数提供的表格,因此您可以使用上述查询中的schema_name列。