> On Sep 26, 2019, at 7:44 AM, Krishnakant Mane <kkm...@riseup.net> wrote:
> 
> 
>> On 26/09/19 6:53 PM, Rob Sargent wrote:
>>  
>> 
>> On Sep 26, 2019, at 12:27 AM, Krishnakant Mane <kkm...@riseup.net> wrote:
>> 
>>> 
>>>> On 26/09/19 12:03 AM, Adrian Klaver wrote:
>>>>> On 9/25/19 8:04 AM, Rob Sargent wrote: 
>>>>> 
>>>>> 
>>>>> On Sep 25, 2019, at 8:24 AM, Krishnakant Mane <kkm...@riseup.net 
>>>>> <mailto:kkm...@riseup.net>> wrote: 
>>>>> 
>>>>>> 
>>>>>>> On 25/09/19 7:50 PM, Adrian Klaver wrote: 
>>>>>>>> On 9/25/19 12:15 AM, Krishnakant Mane wrote: 
>>>>>>>> Hello all, 
>>>>>>>> 
>>>>>>>> I have been using postgresql for an enterprise quality account's 
>>>>>>>> automation and inventory management software called GNUKhata 
>>>>>>>> <https://gnukhata.in> 
>>>>>>>> 
>>>>>>>> Our team is planning to add backup and restore function in the 
>>>>>>>> software. 
>>>>>>>> 
>>>>>>>> But we don't want to dump the entire database and then restore the 
>>>>>>>> same. 
>>>>>>>> 
>>>>>>>> What we are trying to do is to copy data specific to an organization. 
>>>>>>>> 
>>>>>>>> The challenge here is that I might copy all data (account heads, 
>>>>>>>> bills, vouchers etc ) for one organization from an instance on one 
>>>>>>>> machine. 
>>>>>>>> 
>>>>>>>> I take the archive in what ever format to another machine and now 
>>>>>>>> attempt to restore. 
>>>>>>>> 
>>>>>>>> The risk here is for example if the primary key value for orgcode in 
>>>>>>>> the organization table is 5, it might conflict with the data where I 
>>>>>>>> am attempting                     it to be restored. 
>>>>>>>> 
>>>>>>>> Same holds true for bills, invoices etc. 
>>>>>>>> 
>>>>>>>> A certain account head with accountcode 1 might be already present on 
>>>>>>>> the second machine. 
>>>>>>>> 
>>>>>>>> I am not expecting the users to empty all data from the destination 
>>>>>>>> machine before restoring a backup. 
>>>>>>>> 
>>>>>>>> The reason is that an auditor may have many client's data and one 
>>>>>>>> can't predict what primary key values are going to come from a backup. 
>>>>>>>> 
>>>>>>>> Basically I can even say this is a copy paste instead of a pure backup 
>>>>>>>> and restore. 
>>>>>>>> 
>>>>>>>> Can any one suggest how to handle such conflicts? 
>>>>>>> 
>>>>>>> Hard to say. If the data is held in common tables(bills, vouchers, 
>>>>>>> etc)then the only thing I see happening is changing the PK values to an 
>>>>>>> unused value. That could turn into a nightmare though. Not only that 
>>>>>>> you lose the connection to the original data source. If the data can be 
>>>>>>> broken out into separate tables then I could see placing them in their 
>>>>>>> own schema. 
>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> -- 
>>>>>>>> Regards, 
>>>>>>>> Krishnakant Mane, 
>>>>>>>> Project Founder and Leader, 
>>>>>>>> GNUKhata <https://gnukhata.in/> 
>>>>>>>> //(Opensource Accounting, Billing and Inventory Management Software)// 
>>>>>>> 
>>>>>> 
>>>>>> Hi Adrian, 
>>>>>> 
>>>>>> Even I am thinnking to do some kind of upsert with this situation. 
>>>> 
>>>> So to be clear the tables you are working can have records from multiple 
>>>> organizations in a single table? 
>>>> 
>>>>>> 
>>>>>> And I would have to set the pkey to an unassigned value when there is 
>>>>>> conflict. 
>>>> 
>>>> I am seeing nextval() in your future:) 
>>>> 
>>>>>> 
>>>>>> I may also choose to revamp the serial by timestamps but don't know if 
>>>>>> the target customers would like it. 
>>>> 
>>>> I would avoid that. In my opinion timestamps are to too volatile to serve 
>>>> as a PK. If you are going to change I would go with the previous 
>>>> suggestion of UUID: 
>>>> https://www.postgresql.org/docs/11/datatype-uuid.html 
>>>> 
>>>> Not sure your customers would like that either. 
>>>> 
>>> Hi Adrian,
>>> 
>>> I think I would make them like the uuid idea.
>>> 
>>> So now what I am thinking is to first revamp the database by first removing 
>>> all the primary key constraints and then deleting all the values.
>>> 
>>> Then loop through the existing data and get uuid in that colum for every 
>>> row.
>>> 
>>> I might also require to update all the references to this value as foreign 
>>> key in related tables.
>>> 
>>> But I guess some kind of on update cascade might do well.
>>> 
>>> I know this would slow down the system, but given that this will be a one 
>>> time process for an individual user (that too if he has existing data ), I 
>>> would take that trade-off.
>>> 
>>> What do you say?
>>> 
>>>>>> 
>>>>>> -- 
>>>>>> Regards, 
>>>>>> Krishnakant Mane, 
>>>>>> Project Founder and Leader, 
>>>>>> GNUKhata <https://gnukhata.in/> 
>>>>>> //(Opensource Accounting, Billing and Inventory Management Software)// 
>>>>> It would likely be easier to rethink your backup and restore plan. 
>>>>> Putting each restore into its own space would be one tack. 
>>>> 
>>>> 
>>> -- 
>>> Regards, 
>>> Krishnakant Mane,
>>> Project Founder and Leader,
>>> GNUKhata
>>> (Opensource Accounting, Billing and Inventory Management Software)
>> You might think about adding the new UUID column and use the existing 
>> primary key to inform the updates in dependent tables. Then remove the old 
>> PK  column and constraint followed by promoting the UUID to primary key. 
>> This could be safely scripted and applied to all instances of your data. 
>> That said, this is only truly necessary of you have production databases to 
>> worry about.
> 
> Thanks a million, this is the most logical and safe way.
> 
> yes I have a lot of production databases to worry about.
> 
> I am only confused about what you mean by "use the existing primary key to 
> inform the updates in dependent tables."
> 
> Are you refering to a cascading effect?
> 
> If yes then does it mean I first program my upgrade script to manually go 
> through all new uuid keys and update the same in the depending tables with 
> reference to the old primary key working as foreign key in those tables?
> 
> 
> 
Yes. You will need the old keys to recreate referential integrity (foreign 
keys, etc)
> -- 
> Regards, 
> Krishnakant Mane,
> Project Founder and Leader,
> GNUKhata
> (Opensource Accounting, Billing and Inventory Management Software)

Reply via email to