You need to enable JavaScript to run this app. Oracle迁移至PostgreSQL:Oracle中tab对象的PostgreSQL等价替代实现
优惠活动
大模型
产品
解决方案
定价
更多

Oracle迁移至PostgreSQL:Oracle中tab对象的PostgreSQL等价替代实现

PostgreSQL适配Oracleselect * from tab;的替代方案

PostgreSQL无内置的同名tab系统对象,可通过自定义系统视图、直接查询系统目录的方式完全覆盖原语句的使用场景,具体实现如下:

  • 完全对齐原Oracle查询习惯的适配方案
    创建与Oracle逻辑完全一致的自定义tab视图,后续执行select * from tab;即可得到与原环境一致的返回结果(包含对象名、对象类型字段):
CREATE OR REPLACE VIEW tab AS
SELECT 
  c.relname AS tname,
  CASE c.relkind
    WHEN 'r' THEN 'TABLE'
    WHEN 'v' THEN 'VIEW'
    WHEN 'm' THEN 'MATERIALIZED VIEW'
    WHEN 's' THEN 'SEQUENCE'
    WHEN 'f' THEN 'FOREIGN TABLE'
    WHEN 'p' THEN 'PARTITIONED TABLE'
  END AS tabtype,
  NULL AS clusterid
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE 
  n.nspname = current_schema()
  AND c.relkind IN ('r','v','m','s','f','p')
  AND c.relispartition = false
  AND pg_catalog.pg_table_is_visible(c.oid);
  • 全量对象清单查询方案
    如果需要获取当前用户有权限访问的、全库范围内所有非系统内置的表、视图等对象,可直接执行以下系统目录查询:
SELECT 
  n.nspname AS schema_name,
  c.relname AS object_name,
  CASE c.relkind
    WHEN 'r' THEN '普通表'
    WHEN 'v' THEN '视图'
    WHEN 'm' THEN '物化视图'
    WHEN 's' THEN '序列'
    WHEN 'f' THEN '外部表'
    WHEN 'p' THEN '分区表'
  END AS object_type
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE 
  n.nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')
  AND c.relkind IN ('r','v','m','s','f','p')
  AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY schema_name, object_name;

逻辑差异说明:原生Oracletab视图默认仅返回当前登录用户默认schema下的自有对象,上述自定义创建的tab视图完全匹配该逻辑,无需修改原有应用的查询语句即可平滑运行。

内容的提问来源于stack exchange,提问作者dros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.15 03:24:03