PostgreSQL - How to keep a column updated












0















I'm new to SQL and I'm trying to update a column (ex_counter) of a table (ex_table). This column consists of a counter of the number of times an ID (ex_id) appears on a second table (ex2_id in ex2_table).



An ID can be inserted into the second table at any moment. If that ID is already existing, the counter of its corresponding ID in the first table must be updated (by simply adding 1, I guess).



These are the two tables:



CREATE TABLE ex_table(
ex_id SMALLINT,
ex_counter SMALLINT;)

CREATE TABLE ex2_table(
ex2_id SMALLINT;)


I think it should be done more or less like this. The commented code is the pseudocode that I don't know how to implement:



CREATE TRIGGER ex_trigger AFTER
INSERT ON ex2_table
FOR EACH ROW EXECUTE PROCEDURE ex_func();



CREATE FUNCTION ex_func() RETURNS trigger AS $$ BEGIN

/*
if ex2_id = ex_id
ex_counter = ex_counter + 1
*/

RETURN NULL;
END;
$$ LANGUAGE plpgsql;


Thanks in advance!










share|improve this question



























    0















    I'm new to SQL and I'm trying to update a column (ex_counter) of a table (ex_table). This column consists of a counter of the number of times an ID (ex_id) appears on a second table (ex2_id in ex2_table).



    An ID can be inserted into the second table at any moment. If that ID is already existing, the counter of its corresponding ID in the first table must be updated (by simply adding 1, I guess).



    These are the two tables:



    CREATE TABLE ex_table(
    ex_id SMALLINT,
    ex_counter SMALLINT;)

    CREATE TABLE ex2_table(
    ex2_id SMALLINT;)


    I think it should be done more or less like this. The commented code is the pseudocode that I don't know how to implement:



    CREATE TRIGGER ex_trigger AFTER
    INSERT ON ex2_table
    FOR EACH ROW EXECUTE PROCEDURE ex_func();



    CREATE FUNCTION ex_func() RETURNS trigger AS $$ BEGIN

    /*
    if ex2_id = ex_id
    ex_counter = ex_counter + 1
    */

    RETURN NULL;
    END;
    $$ LANGUAGE plpgsql;


    Thanks in advance!










    share|improve this question

























      0












      0








      0








      I'm new to SQL and I'm trying to update a column (ex_counter) of a table (ex_table). This column consists of a counter of the number of times an ID (ex_id) appears on a second table (ex2_id in ex2_table).



      An ID can be inserted into the second table at any moment. If that ID is already existing, the counter of its corresponding ID in the first table must be updated (by simply adding 1, I guess).



      These are the two tables:



      CREATE TABLE ex_table(
      ex_id SMALLINT,
      ex_counter SMALLINT;)

      CREATE TABLE ex2_table(
      ex2_id SMALLINT;)


      I think it should be done more or less like this. The commented code is the pseudocode that I don't know how to implement:



      CREATE TRIGGER ex_trigger AFTER
      INSERT ON ex2_table
      FOR EACH ROW EXECUTE PROCEDURE ex_func();



      CREATE FUNCTION ex_func() RETURNS trigger AS $$ BEGIN

      /*
      if ex2_id = ex_id
      ex_counter = ex_counter + 1
      */

      RETURN NULL;
      END;
      $$ LANGUAGE plpgsql;


      Thanks in advance!










      share|improve this question














      I'm new to SQL and I'm trying to update a column (ex_counter) of a table (ex_table). This column consists of a counter of the number of times an ID (ex_id) appears on a second table (ex2_id in ex2_table).



      An ID can be inserted into the second table at any moment. If that ID is already existing, the counter of its corresponding ID in the first table must be updated (by simply adding 1, I guess).



      These are the two tables:



      CREATE TABLE ex_table(
      ex_id SMALLINT,
      ex_counter SMALLINT;)

      CREATE TABLE ex2_table(
      ex2_id SMALLINT;)


      I think it should be done more or less like this. The commented code is the pseudocode that I don't know how to implement:



      CREATE TRIGGER ex_trigger AFTER
      INSERT ON ex2_table
      FOR EACH ROW EXECUTE PROCEDURE ex_func();



      CREATE FUNCTION ex_func() RETURNS trigger AS $$ BEGIN

      /*
      if ex2_id = ex_id
      ex_counter = ex_counter + 1
      */

      RETURN NULL;
      END;
      $$ LANGUAGE plpgsql;


      Thanks in advance!







      sql postgresql database-trigger






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 25 '18 at 0:59









      UnfolderUnfolder

      1




      1
























          1 Answer
          1






          active

          oldest

          votes


















          1














          Something like this



          IF EXISTS (SELECT * FROM ex_table WHERE ex_id = new.ex2_id) THEN
          UPDATE ex_table
          SET ex_counter = ex_counter + 1
          WHERE ex_id = new.ex2_id
          ELSE
          INSERT INTO ex_table VALUES (new.ex2_id, 1)
          END IF;


          Note that it is no point really to store a counter since you so easily can retrieve the value by doing a SELECT COUNT()...






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53463785%2fpostgresql-how-to-keep-a-column-updated%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1














            Something like this



            IF EXISTS (SELECT * FROM ex_table WHERE ex_id = new.ex2_id) THEN
            UPDATE ex_table
            SET ex_counter = ex_counter + 1
            WHERE ex_id = new.ex2_id
            ELSE
            INSERT INTO ex_table VALUES (new.ex2_id, 1)
            END IF;


            Note that it is no point really to store a counter since you so easily can retrieve the value by doing a SELECT COUNT()...






            share|improve this answer




























              1














              Something like this



              IF EXISTS (SELECT * FROM ex_table WHERE ex_id = new.ex2_id) THEN
              UPDATE ex_table
              SET ex_counter = ex_counter + 1
              WHERE ex_id = new.ex2_id
              ELSE
              INSERT INTO ex_table VALUES (new.ex2_id, 1)
              END IF;


              Note that it is no point really to store a counter since you so easily can retrieve the value by doing a SELECT COUNT()...






              share|improve this answer


























                1












                1








                1







                Something like this



                IF EXISTS (SELECT * FROM ex_table WHERE ex_id = new.ex2_id) THEN
                UPDATE ex_table
                SET ex_counter = ex_counter + 1
                WHERE ex_id = new.ex2_id
                ELSE
                INSERT INTO ex_table VALUES (new.ex2_id, 1)
                END IF;


                Note that it is no point really to store a counter since you so easily can retrieve the value by doing a SELECT COUNT()...






                share|improve this answer













                Something like this



                IF EXISTS (SELECT * FROM ex_table WHERE ex_id = new.ex2_id) THEN
                UPDATE ex_table
                SET ex_counter = ex_counter + 1
                WHERE ex_id = new.ex2_id
                ELSE
                INSERT INTO ex_table VALUES (new.ex2_id, 1)
                END IF;


                Note that it is no point really to store a counter since you so easily can retrieve the value by doing a SELECT COUNT()...







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 25 '18 at 8:21









                Joakim DanielsonJoakim Danielson

                7,8743724




                7,8743724






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53463785%2fpostgresql-how-to-keep-a-column-updated%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks

                    Calculate evaluation metrics using cross_val_predict sklearn

                    Insert data from modal to MySQL (multiple modal on website)