Search Postgresql Archives

Re: Insert data if it is not existing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 05/23/2018 05:12 PM, tango ward wrote:
Sorry I forgot to mention. The table that I am working on right now doesn't have any unique column. AFAIK, I can only use ON CONFLICT if there's an error for unique column.

I have not tried it but I believe you can create an INDEX on the fly:

https://www.postgresql.org/docs/10/static/sql-insert.html#SQL-ON-CONFLICT

"index_expression

Similar to index_column_name, but used to infer expressions on table_name columns appearing within index definitions (not simple columns). Follows CREATE INDEX format. SELECT privilege on any column appearing within index_expression is required.
"

I take this to mean something like:

ON CONFLICT UNIQUE INDEX name_idx ON my_table(name)



On Thu, May 24, 2018 at 8:04 AM, Adrian Klaver <adrian.klaver@xxxxxxxxxxx <mailto:adrian.klaver@xxxxxxxxxxx>> wrote:

    On 05/23/2018 04:58 PM, tango ward wrote:

        Thanks masters for responding again.

        I've tried running the code:

        INSERT INTO my_table(name, age)
        SELECT name, age
        WHERE NOT EXISTS(SELECT name FROM my_table WHERE name= name)


    The first thing I see is that:

    SELECT name, age

    is not being selected from anywhere, for example:

    SELECT name, age FROM some_table.

    The second thing I see is why not use ON CONFLICT?



        this doesn't give me error but it doesn't insert data either.

        On Thu, May 24, 2018 at 3:35 AM, Adrian Klaver
        <adrian.klaver@xxxxxxxxxxx <mailto:adrian.klaver@xxxxxxxxxxx>
        <mailto:adrian.klaver@xxxxxxxxxxx
        <mailto:adrian.klaver@xxxxxxxxxxx>>> wrote:

             On 05/23/2018 10:00 AM, David G. Johnston wrote:

                 On Wednesday, May 23, 2018, tango ward
        <tangoward15@xxxxxxxxx <mailto:tangoward15@xxxxxxxxx>
                 <mailto:tangoward15@xxxxxxxxx
        <mailto:tangoward15@xxxxxxxxx>> <mailto:tangoward15@xxxxxxxxx
        <mailto:tangoward15@xxxxxxxxx>
                 <mailto:tangoward15@xxxxxxxxx
        <mailto:tangoward15@xxxxxxxxx>>>> wrote:

                      I just want to ask if it's possible to insert data
        if it's not
                      existing yet.


                 This seems more like a philosophical question than a
        technical
                 one...
                 ​but the answer is yes:

                 CREATE TABLE test_t (a varchar, b varchar, c integer);
                 INSERT INTO test_t
                 SELECT '1', '2', 3 WHERE false;​ --where false causes
        the data
                 to effectively "not exist"

                 As for ON CONFLICT: conflicts can only happen between
        things
                 that exist.


             Well that made my day:)


                 David J.



             --     Adrian Klaver
        adrian.klaver@xxxxxxxxxxx <mailto:adrian.klaver@xxxxxxxxxxx>
        <mailto:adrian.klaver@xxxxxxxxxxx
        <mailto:adrian.klaver@xxxxxxxxxxx>>




-- Adrian Klaver
    adrian.klaver@xxxxxxxxxxx <mailto:adrian.klaver@xxxxxxxxxxx>




--
Adrian Klaver
adrian.klaver@xxxxxxxxxxx




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux