Search This Blog

2021/02/02

INSERT or update on postgres View

we usually create view is it feasible to insert or update on views instead of table lets explore.

   point to note that if insert succeed on view then data essentially got inserted into table only.


case simple view:
    create new view as follows

        create view vw_15
        as
        select * from book where id <=15

    attempt an insert

        insert into vw_15(title,author) values('my book','test')
    Output:

    INSERT 0 1

    Query returned successfully in 235 msec.

    Inference : insert got succeeded

Case view with computed column

    First we will create a view as follows
        create view vw_lw_author
        as
        select title,lower(author) as author from book

    try to insert into view

        insert into vw_lw_author(title,author) values('my book','SANGRAM')



    Output:
        ERROR:  cannot insert into column "author" of view "vw_lw_author"
        DETAIL:  View columns that are not columns of their base relation are not updatable.
        SQL state: 0A000
        
    Inference : insert failed
    
Case view with check option    
    create view vw_15_check
    as
    select * from book where id <=15 with check option    
    
     try to insert here
    
    insert into vw_15_check(title,author) values('my book','SANGRAM')

                                                 or

    insert into vw_lw_author(title,author) values('my book','sangram')
    
    Output:
        ERROR:  new row violates check option for view "vw_15_check"
        DETAIL:  Failing row contains (20, my book, SANGRAM, null, null, null, null).
        SQL state: 44000
    
    Inference : insert failed    
    
    
Updating with check option column
      our view

    create view vw_price_lte_200
    as
    select * from public."Movies" where "Price" <=200 with check option    
    
    we try to update
    
        update vw_price_lte_200 set "Price" = 150
        
        output:
            UPDATE 1

            Query returned successfully in 106 msec.
            
        Here update succeed


    Now try update that violate constraint
    
    update vw_price_lte_200 set "Price" = 600
    
    Output:
        ERROR:  new row violates check option for view "vw_price_lte_200"
        
    Here update fails.
        DETAIL:  Failing row contains (5, Sholay, 2019-10-10, Action, 600).
        SQL state: 44000

No comments:

Post a Comment