我有一个具有多个模式的 Postgres 数据库。我正在尝试使用最佳数据类型来优化我的数据库表。更多时候我以错误结束
无法更改视图使用的列的类型
使用查询时
alter table schema.tbl_name alter column column_name type varchar(5) using column_name::varchar(5);
有什么方法(函数)可以列出与表相关的所有视图吗?
使用此查询:
select
u.view_schema schema_name,
u.view_name,
u.table_schema referenced_table_schema,
u.table_name referenced_table_name,
v.view_definition
from information_schema.view_table_usage u
join information_schema.views v on u.view_schema = v.table_schema
and u.view_name = v.table_name
where u.table_schema not in ('information_schema', 'pg_catalog')
order by u.view_schema, u.view_name
基于 Bohemian 的回答,这里有一个视图和后续查询,它将生成某个表的所有视图。
但是,它不会捕获依赖于您的表的视图的视图。
CREATE OR REPLACE VIEW dba.v_views_on_table AS
select vtu.view_schema
, vtu.view_name
, vtu.table_schema
, vtu.table_name
, v.view_definition
from information_schema.view_table_usage vtu
join information_schema.views v on (vtu.view_schema = v.table_schema
and vtu.view_name = v.table_name)
where vtu.table_schema not in ('information_schema', 'pg_catalog')
order by vtu.view_schema, vtu.view_name
;
\pset format unaligned
\pset tuples_only
\o sometable_views.sql
select format('CREATE VIEW %s AS %s %s'
, u.view_schema||'.'||u.view_name
, E'\n'
, v.view_definition)
from information_schema.view_table_usage u
join information_schema.views v on u.view_schema = v.table_schema
and u.view_name = v.table_name
where u.table_schema||'.'||u.table_name = 'someschema.sometable'
order by u.view_schema, u.view_name
;