From: | Tim Landscheidt <tim(at)tim-landscheidt(dot)de> |
---|---|
To: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: Getting a list of a table's attributes that are sortable sorted by uniqueness |
Date: | 2012-01-27 02:13:52 |
Message-ID: | m3d3a56gf3.fsf@passepartout.tim-landscheidt.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
I wrote:
> I frequently use pg_dump to dump databases and compare them
> with diff. To get rid of most "false positives", I'd like
> to patch pg_dump to sort the table so that its dumped order
> isn't changed more than necessary by insertions & Co.
> So I'm looking for a query that will return a list of a
> table's attributes that are sortable (e. g. no XML fields)
> and sorted by "uniqueness", i. e. first attributes repre-
> senting the primary key, then other unique keys, then the
> rest.
> Before I dive into the depths of PostgreSQL's system cata-
> logues, has anyone already solved this problem?
Progress report: The query:
| SELECT attname,
| attnum,
| keyrank,
| columnrankinkey
| FROM pg_attribute
| LEFT JOIN
| (SELECT DISTINCT ON (tableid,
| columnnr) indrelid as tableid,
| indkey [subscript] AS columnnr,
| CASE
| WHEN indisprimary THEN 0
| WHEN indisunique THEN 1
| ELSE 2
| END as keyrank,
| subscript as columnrankinkey
| FROM
| (SELECT indrelid,
| indkey,
| generate_subscripts(indkey, 1) as subscript,
| indisprimary,
| indisunique
| FROM pg_index
| ORDER BY indrelid,
| indkey,
| indisprimary DESC, indisunique DESC) AS s
| ORDER BY tableid, columnnr, CASE
| WHEN indisprimary THEN 0
| WHEN indisunique THEN 1
| ELSE 2
| END, columnrankinkey) AS s2 ON attrelid = tableid
| AND attnum = columnnr
| WHERE attrelid = 'tablename'::regclass
| AND NOT attisdropped
| AND attnum > 0
| ORDER BY keyrank,
| columnrankinkey,
| attnum;
does almost what I want except:
- Attributes that can't be sorted (XML) aren't skipped, and
- "UNIQUE(A, B)" and "UNIQUE(C, D)" would give "A, C, B, D"
(untested) so the "rank" of a non-primary key has yet to
be included.
Stay tuned.
Tim
(looking forward to "UNNEST ... WITH ORDINALITY")
From | Date | Subject | |
---|---|---|---|
Next Message | Lew | 2012-01-27 19:04:25 | Re: Query question |
Previous Message | David Johnston | 2012-01-27 00:20:07 | Re: Update Mass Data in Field? |