OSDN Git Service

Change configuration for source tarballs and RPMs
[pgdbmsstats/pg_dbms_stats.git] / pg_dbms_stats--1.0--1.3.2-9.2.sql
1 /* pg_dbms_stats/pg_dbms_stats--1.0--1.3.2.sql */
2
3 -- complain if script is sourced in psql, rather than via CREATE EXTENSION
4 \echo Use "ALTER EXTENSION pg_dbms_stats UPDATE TO '1.3.2'" to load this file. \quit
5
6 -- NOTE: Due to some mistake in version management, the version 1.3.0,
7 -- 1,3.1 are named as '1.0. So this script upgrades this module from
8 -- both of the versions.
9
10 --
11 -- Statistics views for internal use
12 --    These views are used to merge authentic stats and dummy stats by hook
13 --    function, so we don't grant SELECT privilege to PUBLIC.
14 --
15
16 CREATE OR REPLACE VIEW dbms_stats.column_stats_effective AS
17     SELECT * FROM (
18         SELECT (dbms_stats.merge(v, s)).*
19           FROM pg_catalog.pg_statistic s
20           FULL JOIN dbms_stats._column_stats_locked v
21          USING (starelid, staattnum, stainherit)
22          WHERE NOT dbms_stats.is_system_catalog(starelid)
23                    AND EXISTS (
24                         SELECT NULL
25                           FROM pg_attribute a
26                          WHERE a.attrelid = starelid
27                            AND a.attnum = staattnum
28                            AND a.attisdropped  = false
29                         )
30         ) m
31      WHERE starelid IS NOT NULL;
32
33 --
34 -- CLEAN_STATS: Clean orphan dummy statistic
35 --
36
37 CREATE OR REPLACE FUNCTION dbms_stats.clean_up_stats() RETURNS SETOF text AS
38 $$
39 DECLARE
40         clean_relid             Oid;
41         clean_attnum    int2;
42         clean_inherit   bool;
43         clean_rel_col   text;
44 BEGIN
45     LOCK dbms_stats._relation_stats_locked IN SHARE UPDATE EXCLUSIVE MODE;
46     LOCK dbms_stats._column_stats_locked IN SHARE UPDATE EXCLUSIVE MODE;
47
48         -- We don't have to check that table-level dummy statistic of the table
49         -- exists here, because the foreign key constraints defined on column-level
50         -- dummy static table eusures that.
51         FOR clean_rel_col, clean_relid, clean_attnum, clean_inherit IN
52                 SELECT r.relname || ', ' || v.staattnum::text,
53                            v.starelid, v.staattnum, v.stainherit
54                   FROM dbms_stats._column_stats_locked v
55                   JOIN dbms_stats._relation_stats_locked r ON (v.starelid = r.relid)
56                  WHERE NOT EXISTS (
57                         SELECT NULL
58                           FROM pg_attribute a
59                          WHERE a.attrelid = v.starelid
60                            AND a.attnum = v.staattnum
61                            AND a.attisdropped  = false
62                 )
63         LOOP
64                 DELETE FROM dbms_stats._column_stats_locked
65                  WHERE starelid = clean_relid
66                    AND staattnum = clean_attnum
67                    AND stainherit = clean_inherit;
68                 RETURN NEXT clean_rel_col;
69         END LOOP;
70
71         RETURN QUERY
72                 DELETE FROM dbms_stats._relation_stats_locked r
73                  WHERE NOT EXISTS (
74                         SELECT NULL
75                           FROM pg_class c
76                          WHERE c.oid = r.relid)
77                  RETURNING relname || ',';
78         RETURN;
79 END
80 $$
81 LANGUAGE plpgsql;
82 --