I see.  That would definitely work, but part of this for me is to get a
better understanding of PostgreSQL's capabilities.  I'm going to keep
working on a minimal solution that deletes no records from the dev
database, and only inserts the required records.

On Wed, Oct 4, 2023 at 6:58 PM Ron <ronljohnso...@gmail.com> wrote:

> Ah.  We'd truncate all of the dev tables, then load a "slice" (for
> example, accounts 10000 to 19999, and all associated records from
> downstream tables; lots and lots of views!!) from the prod database.
>
> On 10/4/23 20:50, Dow Drake wrote:
>
> Thanks for the reply, Ron!
> I'm not sure I see how to make your suggestion work, though.  Suppose I
> dump the three tables to CSV as you suggest (and write a script to extract
> the relevant records from those CSV dumps in the correct order).  It might
> be that in the dev database, the next generated key values are 199 for
> farm's id, 2145 for crop's id and 10242 for deliveries' id.  The databases
> are independent.
>
> Just inserting the records in the same order doesn't take care of setting
> the foreign key values correctly -- does it?  I think I'm really looking
> for a solution more along the lines of the link in my original post.
>
> Best,
> Dow
>
> On Wed, Oct 4, 2023 at 6:26 PM Ron <ronljohnso...@gmail.com> wrote:
>
>> Frame challenge: why can't you just "\copy to" the dev database tables in
>> the correct order, to satisfy foreign key requirements?
>>
>> On 10/4/23 18:59, Dow Drake wrote:
>>
>> Hi,
>>
>> I'm trying to write a postgresql script to replicate a hierarchical
>> structure in a live database into my development database, where I can
>> debug and test more easily.  I can extract the data from the live database
>> that needs to be inserted, but I'm having trouble writing the insertion
>> script
>>
>> Here's a simplified version of the problem I'm trying to solve:
>> There are three tables: farms, crops and deliveries where a farm has many
>> crops and a crop has many deliveries.
>>
>> create table farms (
>>    id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
>>    name character varying(30)
>> );
>> create table crops (
>>    id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
>>    farm_id bigint not null
>>    name character varying(30)
>> );
>> create table deliveries (
>>    id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
>>    crop_id bigint not null
>>    ticket character varying(30)
>> );
>> I want to insert a farm record, then insert two crops associated with
>> that farm, then insert two deliveries for each of the the two crops so that
>> in the end, my tables look like this:
>> farms
>> id     name
>> 1      'Happy Valley Farm'
>>
>> crops
>> id     farm_id    name
>> 1        1         'corn'
>> 2        1         'wheat'
>>
>> delvieries
>> id       crop_id    ticket
>> 1         1          '3124'
>> 2         2          '3127'
>> 3         1          '3133'
>> 4         2          '3140'
>>
>> It's important that the deliveries get assigned to the right crops.  I
>> think this post: https://dba.stackexchange.com/questions/199916
>> gets close to what I need, but I haven't been able to figure out how to
>> adapt it to multiple records.
>>
>> Thanks for any help on this!
>>
>>
>>
>> --
>> Born in Arizona, moved to Babylonia.
>>
>
> --
> Born in Arizona, moved to Babylonia.
>

Reply via email to