Re: Insert records in the tavke only if they are not exist

From: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
To: Igor Korot <ikorot01(at)gmail(dot)com>, "pgsql-generallists(dot)postgresql(dot)org" <pgsql-general(at)lists(dot)postgresql(dot)org>
Subject: Re: Insert records in the tavke only if they are not exist
Date: 2024-12-07 23:07:22
Message-ID: d10fa09d-cd72-4fca-b5fe-b1f0accc6872@aklaver.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 12/7/24 12:17, Igor Korot wrote:
> Hi, Adrian,
>
> On Sat, Dec 7, 2024 at 12:32 PM Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com> wrote:
>>
>> On 12/7/24 09:59, Igor Korot wrote:
>>> Hi, Adrian,
>>>
>>> On Sat, Dec 7, 2024 at 11:18 AM Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com> wrote:
>>>>
>>>> On 12/6/24 19:36, Igor Korot wrote:
>>>>> Hi, All,
>>>>>
>>>>> When my application starts up, ot creates some tables and insert records
>>>>> in them.
>>>>>
>>>>> When the app starts for the second time it should check if the tables
>>>>> and the records in them are exist and skip the process.
>>>>
>>>> Does this also apply to starts after the second time?
>>>
>>> Yes, it does.
>>>
>>> However, if the new table is created in the meantime - the new record
>>> should be created, because it is not there yet.
>>
>> What determines that a new table needs to be created and populated?
>
> Consider the following scenario:

I did and it made me start twitching.

>
> 1. Program is installed.
> 2. Program is started for the first time.
> 3. My tables are created and populated

What distinguishes your tables from other users tables?

> 4. Program is executed.
> 5. User closes the program.
> 6.. Later on the user decides that there is a need
> for another table (inside psql or any other client)

The above is where I started twitching.

How do you keep them out of your tables?

How do you get these changes to play nice with the existing structure?

> 7. Then the program starts for the second time.
>
> At this time all my tables that were created will stay (courtesy
> of CREATE TABLE IF NOT EXIST).

You are depending on folks not knowing about DROP TABLE and/or you
having thought out the permissions for access thoroughly.

> All records that were there are staying unchanged.

INSERT/UPDATE against your tables is not a possibility?

> However, for the table that was made in between the runs
> will be added
>
> Now if the program is installed on 2 different machines
> and started simultaneously on both - I want to ensure that
> only 1 set of tables is made and only 1 set of records in them
> is available

I assume this means they are both pointing at the same instance of a
database?

This is the part that confuses me.

If you are going to allow ad hoc and at will changes how do you know
what is actually the correct change?

>
> Now, the creation/population is done inside a transaction.

I'm not sure that a transaction is going to solve the issue I raised
above, it will just make one thing happen with no guarantee that it is
the correct outcome.

>> Are you talking about the front end that the user launches or the
>> backend that runs the database or something else?
>
> Front-end.
> This is a C++ app.

To me this is the tail wagging the dog. The thought of allowing users to
change the database structure and you dealing with it after the fact is
just disturbing to me.

>
>>
>>
>>>
>>> Thank you.

--
Adrian Klaver
adrian(dot)klaver(at)aklaver(dot)com

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Igor Korot 2024-12-07 23:58:39 Re: Insert records in the tavke only if they are not exist
Previous Message Igor Korot 2024-12-07 20:17:35 Re: Insert records in the tavke only if they are not exist