Re: Transforming pg_dump output to be compatible with SQLite 3.x

From: John McKown <john(dot)archie(dot)mckown(at)gmail(dot)com>
To: Kynn Jones <kynnjo(at)gmail(dot)com>
Cc: pgsql-general General <pgsql-general(at)postgresql(dot)org>
Subject: Re: Transforming pg_dump output to be compatible with SQLite 3.x
Date: 2014-08-29 14:40:18
Message-ID: CAAJSdjg9tT_Vv1cMCzZM2iqk+9KBO8qmLOY2B=UpdtmyGFGMsQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Fri, Aug 29, 2014 at 9:06 AM, Kynn Jones <kynnjo(at)gmail(dot)com> wrote:
> Greetings!
>
> I'm looking for tools/resources/ideas for making pg_dump's output compatible
> with SQLite v. 3.1.3.
>
> Ideally, I'd love to be able to do something like this (Unix):
>
> % rm -f mydatabase.db
> % pg_dump --no-owner --inserts mydatabase | pg_dump2sqlite3 | sqlite3
> mydatabase.db
>
> ...where pg_dump2sqlite3 stands for some program (or pipeline) that
> transforms the output of pg_dump as needed so that sqlite3 can digest it.
>
> Among the tasks that the hypothetical pg_dump2sqlite3 program has to carry,
> IMO the hardest one to implement is to compute the foreign-key dependencies
> among the tables, and from this compute the sequential order in which the
> tables will be created and populated[1].
>
> Am I correct? Is there a way around this?
>
> TIA!
>
> kj
>
> [1] In pg_dump's output, the sequential ordering of the CREATE TABLE
> statements and of the COPY blocks that respectively define and populate the
> tables does not take into account dependencies, because the specification of
> these dependencies comes after all the CREATE TABLE and COPY commands, in
> the form of ALTER TABLE statements. AFAIK, however, sqlite3 does not allow
> adding foreign key constraints after the table has been created. This means
> that both the ordering of table creation and population must respect the
> dependencies among the tables.

Read down in the man page for pg_dump. There are parameters such as
--inserts and --column-inserts which will help. And you might want
--quote-all-identifiers just in case some attribute (column name) is
an SQLite key word.

Example transcript:

pg_dump -c -t datedata -O -x --column-inserts --quote-all-identifiers
-d PostgreSQL_db | egrep -v '^SET '
--
-- PostgreSQL database dump
--

DROP TABLE "public"."datedata";

--
-- Name: datedata; Type: TABLE; Schema: public; Owner: -; Tablespace:
--

CREATE TABLE "datedata" (
"id" "text",
"date" "date",
"value" "text"
);

--
-- Data for Name: datedata; Type: TABLE DATA; Schema: public; Owner: -
--

INSERT INTO "datedata" ("id", "date", "value") VALUES ('a', '2000-01-01', 'x');
INSERT INTO "datedata" ("id", "date", "value") VALUES ('a', '2000-03-01', 'x');
INSERT INTO "datedata" ("id", "date", "value") VALUES ('b', '2000-11-11', 'w');
INSERT INTO "datedata" ("id", "date", "value") VALUES ('c', '2000-11-11', 'y');
INSERT INTO "datedata" ("id", "date", "value") VALUES ('c', '2000-10-01', 'y');
INSERT INTO "datedata" ("id", "date", "value") VALUES ('c', '2000-09-10', 'y');
INSERT INTO "datedata" ("id", "date", "value") VALUES ('c', '2000-12-12', 'z');
INSERT INTO "datedata" ("id", "date", "value") VALUES ('c', '2000-10-11', 'z');
INSERT INTO "datedata" ("id", "date", "value") VALUES ('d', '2000-11-11', 'w');
INSERT INTO "datedata" ("id", "date", "value") VALUES ('d', '2000-11-10', 'w');

--
-- PostgreSQL database dump complete
--

--
There is nothing more pleasant than traveling and meeting new people!
Genghis Khan

Maranatha! <><
John McKown

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Adrian Klaver 2014-08-29 14:58:59 Re: Transforming pg_dump output to be compatible with SQLite 3.x
Previous Message Kynn Jones 2014-08-29 14:06:21 Transforming pg_dump output to be compatible with SQLite 3.x