我怎样才能将物化视图作为物化视图pg_dump而不是表格?

时间:2015-04-21 21:49:48

标签: postgresql materialized-views pg-dump

我试图从一个db和pg_restore尝试pg_dump(v9.3.4)到另一个db(v9.3.6)。我有几个物化视图(一些具有索引,一些没有索引)。我的一个物化视图被转储为一个表(我已经通过查看pg_dump输出确认了这一点)。如何将其作为物化视图转储?

这是我在pg_dump输出中看到的内容:

CREATE TABLE my_mv (
  /* ... */
);

/* ... */

CREATE INDEX my_mv_col_1_idx ON my_mv USING btree (col_1);

/* ... */

CREATE RULE "_RETURN" AS
    ON SELECT TO my_mv DO INSTEAD  WITH tmp_1 AS (

/* ... */

我的其他MV看起来像这样:

CREATE MATERIALIZED VIEW my_good_mv AS
  SELECT /* ... */
WITH NO DATA;

/* ... */

CREATE INDEX my_good_mv_job_col_1_idx ON my_good_mv USING btree (col_1);

/* ... */

REFRESH MATERIALIZED VIEW my_good_mv;

我确认这是MV:

xxx=# SELECT relkind FROM pg_class WHERE oid = 'public.my_mv'::regclass;
 relkind 
---------
 m
(1 row)

这是MV定义:

create materialized view mv_members
(
  id,
  state,
  tags,
  primary_job_function, job_functions,
  min_salary,
  current_level, current_employer, desired_employment_types, desired_org_sizes,
  years_of_pro_experience,
  current_location, current_location_parents, desired_locations, desired_location_parents,
  creation_date)
as
with wh as (
  select poach_id, employer
  from (
    select poach_id, employer, row_number() over (partition by poach_id order by employer) as n
    from work_histories
    where end_year is null) t
  where n = 1),
tags as (
  select parent_id as poach_id, array_remove(array_agg(tag), null) as tags
  from poach_tags
  group by poach_id),
jfns as (
  select poach_id, array_remove(array_agg(job_function_id), null) as job_functions
  from poach_job_functions
  group by poach_id),
pjf as (
  select poach_id, job_function_id
  from (
    select poach_id, job_function_id, row_number() over (partition by poach_id order by job_function_id) as n
    from poach_job_functions
    where is_primary = true) t
  where n = 1),
pdl as (
  select
    p.id as poach_id,
    case when p.desired_locations != '{}'
      then p.desired_locations
      else
        case when p.mapped_desired_locations is null
          then '{}'
          else p.mapped_desired_locations
        end
    end as desired_locations
  from poaches p),
pdla as (
  select pdl.poach_id, unnest(l.ancestors) as ancestor
  from pdl
  inner join locations l on l.id = any(pdl.desired_locations)),
min_salaries as (
  select p.id as poach_id,
  case when min_salary_min is not null
    then min_salary_min
    else
      case when min_salary_max is not null
        then 0 
        else
          case when current_salary_min is not null
            then current_salary_min
            else
              case when current_salary_max is not null
                then 0
                else null
              end
          end
      end
  end as min_salary
  from poaches p)
select
  p.id,
  s.state,
  coalesce(t.tags, '{}'),
  pjf.job_function_id,
  coalesce(jfns.job_functions, '{}') as job_functions,
  min_salaries.min_salary as min_salary,
  p.current_level,
  wh.employer,
  p.employment_types,
  p.desired_org_sizes,
  p.years_of_pro_experience,
  p.current_location_id as current_location,
  array_remove(array_append(cl.ancestors, p.current_location_id), null) as current_location_parents,
  pdl.desired_locations,
  array_remove(array_cat(array_agg(pdla.ancestor), pdl.desired_locations), null) as desired_location_parents,
  p.creation_date
from
  poaches p
  inner join entity_states s on p.id = s.entity_id and s.is_current = true
  inner join min_salaries on p.id = min_salaries.poach_id
  left outer join tags t on p.id = t.poach_id
  left outer join wh on p.id = wh.poach_id
  left outer join pjf on p.id = pjf.poach_id
  left outer join jfns on p.id = jfns.poach_id
  left outer join locations cl on p.current_location_id = cl.id
  left outer join pdl on p.id = pdl.poach_id
  left outer join pdla on p.id = pdla.poach_id
where p.is_active = true
group by p.id, s.state, t.tags, pjf.job_function_id, job_functions, min_salary, p.current_level, wh.employer, p.employment_types, p.desired_org_sizes, current_location, current_location_parents, pdl.desired_locations, p.creation_date;

create index on mv_members (state);
create index on mv_members (primary_job_function);
create index on mv_members (job_functions);
create index on mv_members (current_level);
create index on mv_members (desired_employment_types);
create index on mv_members (desired_org_sizes);
create index on mv_members (desired_locations);
create index on mv_members (desired_location_parents);
create index on mv_members (creation_date);

1 个答案:

答案 0 :(得分:0)

物化视图在“技术上”存储为表对象,因此在使用pg_dump导出时,其处理方式如此。使用pg_dump作为MV

无法导出