Re: Obvious data mismatch in View2 which basically SELECT * from View1 - Mailing list pgsql-general

From Jerry Sievers
Subject Re: Obvious data mismatch in View2 which basically SELECT * from View1
Date
Msg-id 87zh5opis3.fsf@jsievers.enova.com
Whole thread Raw
In response to Obvious data mismatch in View2 which basically SELECT * from View1  (Ben <bentenzha@outlook.com>)
Responses Re: Obvious data mismatch in View2 which basically SELECT * from View1
List pgsql-general
Ben <bentenzha@outlook.com> writes:

> Dear List,
>
> Some further investigation.
>
> Creating a fresh View3 on View1 gives exactly the same result as
> View1.
>
> The View1 View2 are both years old in a production database, in use
> for quite some time. (The database is production duty but not hosted
> in server room with UPS. It's like a edge PC in industry monitoring.
> Now am more concerned with its data integrity)
>
> The problem with the final report is reported recently. I am not sure
> what's broken in the database.
>
> I haven't replaced the broken View2 yet. Hope someone can point me to
> some further investigation.

Already mentioned downthread, but have a look at the view definitions
by...

select pg_get_viewdef('$your-view');

Or...

pg_dump --table $your-view

Expect to see something different if you repeat the above for the old
view giving undesired results and the new correct version.

HTH



> My concern is that if there are other views inside that database
> having similar integrity issue, how can I find them all (if any).
>
> It's beyond my regular SQL ability. I guess I really need help from
> people with maintenance experience.
>
> Any help will be appreciated, thanks in advance.
>
> Ben
>
>
>
> On September 16, 2020 3:40:34 AM UTC, Ben <bentenzha@outlook.com>
> wrote:
>
>     Dear list,
>     
>     Recently I am getting feedback, data in my analytic report is not 
>     repeatable. From time to time they get different data for the same time 
>     span.
>     (but IIRC previously it was OK). Therefore I started debuging the View 
>     chain for that report, during which I bumped into this issue/phenomenon.
>     
>     In a over -simplified version:
>     
>     CREATE VIEW2 AS SELECT * FROM VIEW1;
>     SELECT  col1 FROM VIEW2 WHERE cond1=True;
>     SELECT  col1 FROM VIEW1 WHERE cond1=True;
>     
>     Now col1 from both views looks different. I don't know where to start to 
>     solve this problem.
>     
>     The actual situation is a bit more than that, the following is the 
>     actual query:
>     
>     
>          -- trying to audit utlog weighed stat
>          with t as (
>          select '2020-07-01 00:00:00'::timestamp t0, '2020--07-02 
>     0:0:0'::timestamp t1
>          )
>          --select * from t;
>          select *
>          -- from utlog.cache_stats_per_shift_per_reason_weighed_stats
>          -- from utlog.stats_per_shift_filtered_per_reason
>          from utlog.stats_per_shift_filtered                     (let's call 
>     it #View2 for short)
>          -- from utlog.stats_per_shift_filtered_b0206      (let's call it 
>     #View1 for short)
>          -- from utlog.stats_per_shift
>          cross join t
>          where wline = 'F02'  and wts >= t.t0 and wts < t.t1 and wsft ='D'
>          limit 100
>          ;
>     
>     The Result for #View2
>     
>          wts                 | wsft | wspan  | wstate | wline | rcodes
>          --------------------+------+--------+--------+-------+-------
>          2020-07-01 08:00:00 | D    |      0 | S00    | F02   | {PDCB}
>          2020-07-01 09:50:01 | D    | 12.533 | S00    | F02   | {PDCB}
>          2020-07-01 11:35:46 | D    | 12.217 | S00    | F02   | {CDSO}
>          2020-07-01 13:22:58 | D    |   5.15 | S00    | F02   | {PDCB}
>          2020-07-01 14:57:38 | D    |    6.8 | S00    | F02   | {PDCB}
>     
>          INDEX | COLUMN_NAME | DATA_TYPE
>          ------+-------------+------------
>          1     | wts         | timestamptz
>          3     | wsft        | varchar
>          4     | wspan       | float8
>          5     | wstate      | varchar
>          6     | wline       | varchar
>          7     | rcodes      | text[]
>     
>     
>     Same query, the Result for #View1
>     
>          wts                 | wsft | wspan | wstate | wline | rcodes
>          --------------------+------+-------+--------+-------+-------
>          2020-07-01 08:00:00 | D    |     5 | S00    | F02   | {PDCB}
>          2020-07-01 09:50:01 | D    |    13 | S00    | F02   | {PDCB}
>          2020-07-01 11:35:46 | D    |    12 | S00    | F02   | {CDSO}
>          2020-07-01 13:22:58 | D    |     5 | S00    | F02   | {PDCB}
>          2020-07-01 14:57:38 | D    |     7 | S00    | F02   | {PDCB}
>     
>          INDEX | COLUMN_NAME | DATA_TYPE
>          ------+-------------+------------
>          1     | wts         | timestamptz
>          3     | wsft        | varchar
>          4     | wspan       | float8
>          5     | wstate      | varchar
>          6     | wline       | varchar
>          7     | rcodes      | varchar[]
>     
>     Reuslts in `wspan` column is inaccurate while both type are float8. Most 
>     weird thing is the 5 to 0 change. for Row 1.
>     
>     The `_b0206`(#View1) is just a version of 
>     `stats_per_shift_filtered`(#View2) from past revisions.
>     I am sure the original CREATE statement for (#View2) is `CREATE VIEW ... 
>     AS SELECT * FROM ...._b0206`
>     
>     Definition of View2 in SQLWorkbench/J generated schema:
>     
>     
>          CREATE OR REPLACE VIEW utlog.stats_per_shift_filtered (#View2)
>          (
>          wts,
>          wdate,
>          wsft,
>          wspan,
>          wstate,
>          wline,
>          rcodes
>          )
>          AS
>          SELECT stats_per_shift_filtered_u0206.wts,
>              stats_per_shift_filtered_u0206.wsft::character varying AS wsft,
>              stats_per_shift_filtered_u0206.wspan,
>              stats_per_shift_filtered_u0206.wstate,
>              stats_per_shift_filtered_u0206.wline,
>              stats_per_shift_filtered_u0206.rcodes
>          FROM utlog.stats_per_shift_filtered_u0206;  (as #View1 in this post)
>     
>     
>     It feels like the utlog.stats_per_shift_filtered_u0206 in 
>     utlog.stats_per_shift_filtered definition is a different object from 
>     utlog.stats_per_shift_filtered_u0206?
>     
>     I am totally out of clues. Any help would be appreciated. Thanks.
>     
>     
>     Regards,
>     
>     Ben
>     
>     
>     
>
> --
> Sent from my Android device with K-9 Mail. Please excuse my brevity.
>
>

-- 
Jerry Sievers
Postgres DBA/Development Consulting
e: postgres.consulting@comcast.net



pgsql-general by date:

Previous
From: Tom Lane
Date:
Subject: Re: PostgreSQL processes use large amount of private memory on Windows
Next
From: "Peter J. Holzer"
Date:
Subject: Re: PostgreSQL processes use large amount of private memory on Windows