Re: Transforming pg_dump output to be compatible with SQLite 3.x - Mailing list pgsql-general

From John McKown
Subject Re: Transforming pg_dump output to be compatible with SQLite 3.x
Date
Msg-id CAAJSdjg9tT_Vv1cMCzZM2iqk+9KBO8qmLOY2B=UpdtmyGFGMsQ@mail.gmail.com
Whole thread Raw
In response to Transforming pg_dump output to be compatible with SQLite 3.x  (Kynn Jones <kynnjo@gmail.com>)
Responses Re: Transforming pg_dump output to be compatible with SQLite 3.x  (Adrian Klaver <adrian.klaver@aklaver.com>)
List pgsql-general
On Fri, Aug 29, 2014 at 9:06 AM, Kynn Jones <kynnjo@gmail.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


pgsql-general by date:

Previous
From: Kynn Jones
Date:
Subject: Transforming pg_dump output to be compatible with SQLite 3.x
Next
From: Adrian Klaver
Date:
Subject: Re: Transforming pg_dump output to be compatible with SQLite 3.x