Re: [HACKERS] [COMMITTERS] pgsql: Add pg_sequence system catalog
От | Stephen Frost |
---|---|
Тема | Re: [HACKERS] [COMMITTERS] pgsql: Add pg_sequence system catalog |
Дата | |
Msg-id | 20170119160305.GS18360@tamriel.snowman.net обсуждение исходный текст |
Ответы |
Re: [HACKERS] [COMMITTERS] pgsql: Add pg_sequence system catalog
Re: [HACKERS] [COMMITTERS] pgsql: Add pg_sequence system catalog |
Список | pgsql-hackers |
Peter, * Peter Eisentraut (peter_e@gmx.net) wrote: > Add pg_sequence system catalog The query this added to dumpSequence() seems to think that sequence names are unique across databases: appendPQExpBuffer(query, "SELECT seqstart, seqincrement, " "CASE WHEN seqincrement > 0 ANDseqmax = %s THEN NULL " " WHEN seqincrement < 0 AND seqmax = -1 THEN NULL " " ELSE seqmax " "END AS seqmax, " "CASE WHEN seqincrement > 0 AND seqmin = 1 THEN NULL " " WHEN seqincrement < 0 AND seqmin = %s THEN NULL " " ELSE seqmin " "END AS seqmin, " "seqcache, seqcycle " "FROM pg_class c " "JOIN pg_sequences ON (s.seqrelid = c.oid) " "WHERE relname = ", bufx, bufm); appendStringLiteralAH(query, tbinfo->dobj.name, fout); Note that tbinfo->dobj.name contains just the name, and trying to match based on just 'relname' isn't going to work since sequences with the same name can exist in difference schemas. I'd suggest using our usual approach in pg_dump, which is matching based on the OID, like so: WHERE c.oid = '%u'::oid The OID is in: tbinfo->dobj.catId.oid Also, you should move the selectSourceSchema() into the per-version branches and set it to 'pg_catalog' for PG10 and up, which would allow you to avoid having to qualify the table names, et al. As is, this query will also fail if a user has created a 'pg_class' or 'pg_sequence' table in their schema. Thanks! Stephen
В списке pgsql-hackers по дате отправления: