Database Research & Development

  • Home
  • NoSQL
    • NoSQL
    • Cassandra
  • Databases
    • Database Theory
    • Database Designing
    • SQL Server Coding Standards
    • SQL Server
    • PostgreSQL
    • MySQL
    • Greenplum
    • Linux
  • Interviews
    • SQL Server Interviews
    • MySQL Interviews
    • SQL Puzzles
  • DBA Scripts
    • SQL Server DBA Scripts
    • PostgreSQL DBA Scripts
    • MySQL DBA Scripts
    • Greenplum DBA Scripts
  • Home
  • Blog Archives !
  • (: Laugh@dbrnd :)
  • Contact Me !
sqlserverinterviews
Home 2017 February PostgreSQL: Script to copy Table Data from one Schema to another Schema

PostgreSQL: Script to copy Table Data from one Schema to another Schema

This article is half-done without your Comment! *** Please share your thoughts via Comment ***

In this post, I am sharing one script to copy your Schema tables into another Schema of PostgreSQL.
I found this script at wiki.postgresql.org and modified the coding standard for the best use.

In our organization, I am creating a different schema for all the database developers, and at every new schema, we require to migrate development origin schema’s table data into a newly created schema.

I created different database users for each database developer, and they can only access their assigned schema. I am doing this for security reason, and it is also very easy to audit the changes and work progress of all the database developers.

Create a below function and execute to migrate your schema.

Create a function to copy old schema data to new schema:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
CREATE OR REPLACE FUNCTION fn_CopySchemaData(source_schema text, dest_schema text)
RETURNS void AS
$$
DECLARE
object text;
buffer text;
default_ text;
column_ text;
BEGIN
 
-- Create a new schema
EXECUTE 'CREATE SCHEMA ' || dest_schema;
FOR object IN
SELECT sequence_name::text
FROM information_schema.SEQUENCES
WHERE sequence_schema = source_schema
LOOP
EXECUTE 'CREATE SEQUENCE ' || dest_schema || '.' || object;
END LOOP;
FOR object IN
SELECT TABLE_NAME::text
FROM information_schema.TABLES
WHERE table_schema = source_schema
LOOP
buffer := dest_schema || '.' || object;
EXECUTE 'CREATE TABLE ' || buffer || ' (LIKE ' || source_schema || '.' || object || ' INCLUDING CONSTRAINTS INCLUDING INDEXES INCLUDING DEFAULTS)';
FOR column_, default_ IN
SELECT column_name::text, REPLACE(column_default::text, source_schema, dest_schema)
FROM information_schema.COLUMNS
WHERE table_schema = dest_schema
AND TABLE_NAME = object
AND column_default LIKE 'nextval(%' || source_schema || '%::regclass)'
LOOP
EXECUTE 'ALTER TABLE ' || buffer || ' ALTER COLUMN ' || column_ || ' SET DEFAULT ' || default_;
END LOOP;
END LOOP;
END;
$$ LANGUAGE plpgsql VOLATILE;

Sample Execution:

1
select *from fn_CopySchemaData('old_schema','new_schema');

Feb 8, 2017Anvesh Patel
SQL Server: Enable CHECKSUM Page Verification to detect a prime spot of Data CorruptionPostgreSQL: pg_rotate_logfile to Switch and Rotate the server log file (pg_log)
Comments: 3
  1. verdan
    June 18, 2018 at 9:43 am

    As I tryied, it works but views from first are converted to tables to second one.

    • Anvesh Patel
      Anvesh Patel
      June 18, 2018 at 6:48 pm

      Hey Verdan,

      Thanks for noticing this.

      Found a bug in the script where one additional filter is required. (table_type <> ‘VIEW’). Below is a correct SELECT statement which I used in the main script.

      SELECT TABLE_NAME::text
      FROM information_schema.TABLES
      WHERE table_schema = source_schema
      AND table_type <> ‘VIEW’

  2. dineshdanny
    July 18, 2018 at 6:01 am

    I was tried this and its perfectly working, but in same way how to copy trigger, view and functions in this sense.

Anvesh Patel
Anvesh Patel

Database Engineer

February 8, 2017 PostgreSQL, PostgreSQL DBA ScriptAnvesh Patel, database, database research and development, dbrnd, migrate schema data, plpgsql, Postgres Query, postgresql, PostgreSQL Administrator, PostgreSQL Error, PostgreSQL Monitoring, PostgreSQL Performance Tuning, PostgreSQL Programming, PostgreSQL Tips and Tricks, schema, schema copy
About Me!

I'm Anvesh Patel, a Database Engineer certified by Oracle and IBM. I'm working as a Database Architect, Database Optimizer, Database Administrator, Database Developer. Providing the best articles and solutions for different problems in the best manner through my blogs is my passion. I have more than six years of experience with various RDBMS products like MSSQL Server, PostgreSQL, MySQL, Greenplum and currently learning and doing research on BIGData and NoSQL technology. -- Hyderabad, India.

About DBRND !

dbrnd

This is a personal blog (www.dbrnd.com).

Any views or opinions represented in this blog are personal and belong solely to the blog owner and do not represent those of people, institutions or organizations that the owner may or may not be associated with in professional or personal capacity, unless explicitly stated.

Feel free to challenge me, disagree with me, or tell me I’m completely nuts in the comments section of each blog entry, but I reserve the right to delete any comment for any reason whatsoever (abusive, profane, rude, or anonymous comments) - so keep it polite.

The content of this website is protected by copyright. No portion of this website may be copied or replicated in any form without the written consent of the website owner.

Recent Comments !
  • Anvesh Patel { Sure will do... } – May 27, 12:43 PM
  • Anvesh Patel { Great... } – May 27, 12:41 PM
  • Anvesh Patel { Great... } – May 27, 12:39 PM
  • Anvesh Patel { Great... } – May 27, 12:36 PM
  • Anvesh Patel { Great... } – May 27, 12:28 PM
  • Anvesh Patel { Great... } – May 27, 12:27 PM
  • Anvesh Patel { Great... } – May 27, 12:16 PM
  • Older »
Follow Me !
  • facebook
  • linkedin
  • twitter
  • youtube
  • google
  • flickr
© 2015 – 2019 All rights reserved. Database Research & Development (dbrnd.com)
Posting....