Re: Modifying database schema without losing data

From: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
To: Rich Shepard <rshepard(at)appl-ecosys(dot)com>, pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Re: Modifying database schema without losing data
Date: 2020-09-28 18:02:16
Message-ID: 945982c5-197f-d3b3-5c15-010cff998bdc@aklaver.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 9/28/20 10:15 AM, Rich Shepard wrote:
> I've been developing a business tracking application for my own use and
> it's
> worked well up to now. But, I need to modify it by adding a table with
> attributes from two other tables. I've not drawn a E-R diagram so I show
> the
> two existing tables here:
>
> CREATE TABLE Organizations (
>   org_id serial PRIMARY KEY,
>   org_name varchar(64) DEFAULT '??' NOT NULL,
>   org_addr1 varchar(64),
>   org_addr2 varchar(64),
>   org_city varchar(16),
>   state_code char(2),
>   org_postcode varchar(10),
>   org_country char(2) DEFAULT 'US' NOT NULL,
>   main_phone varchar(16),
>   org_fax varchar(12),
>   org_url varchar(64),
>   industry varchar(24) DEFAULT 'Other' NOT NULL
>            REFERENCES industries(ind_name)
>            ON UPDATE CASCADE
>            ON DELETE RESTRICT,
>   status varchar(20) DEFAULT 'Opportunity' NOT NULL
>          REFERENCES statusTypes(stat_name)
>          ON UPDATE CASCADE
>          ON DELETE RESTRICT,
>   comment text );
>
> CREATE TABLE People (
>   person_id serial PRIMARY KEY,
>   lname varchar(15) NOT NULL,
>   fname varchar(15) NOT NULL,
>   job_title varchar(32),
>   org_id int DEFAULT '0' NOT NULL
>           REFERENCES Organizations(org_id)
>           ON UPDATE CASCADE
>           ON DELETE RESTRICT,
>   site_name varchar(64),
>   site_addr varchar(32),
>   site_city varchar(16),
>   state_code char(2),
>   site_postcode varchar(10),
>   site_country char(2) DEFAULT 'US' NOT NULL,
>   direct_phone varchar(15),
>   direct_fax varchar(15),
>   cell_phone varchar(15),
>   site_phone varchar(15),
>   ext varchar(6),
>   email varchar(64),
>   active boolean DEFAULT TRUE NOT NULL,
>   comment text
> );
>
> What I should have noticed when I designed this tool is that addresses and
> phone/e-mail addresses can be duplicated when there's only a single
> location. Now I have some prospective clients with multiple locations but I
> have no names of individuals. So, I want to add a Location table with
> addresses and contact information. Each row in that table will have a
> serial PK
> and will use a FK to reference the Organization table. People will now
> reference the Locations table rather than the Organization table.
>
> There are data in each of these tables and my research in my books and on
> the web have not provided any insights on how to modify the existing schema
> and get date into their new appropriate table homes.
>
> I think the long way is to dump the database and manually move rows (using
> emacs) from their current table to the new one, as appropriate, but
> there're
> probably much better ways to do this and I'm eager to learn.

You could use INSERT INTO location(new_fields,) SELECT the_fields FROM
the_table(s).

>
> Regards,
>
> Rich
>
>

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

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Rich Shepard 2020-09-28 18:05:49 Re: Modifying database schema without losing data
Previous Message Rich Shepard 2020-09-28 17:15:35 Modifying database schema without losing data