Re: pg_dump compatibility level / use create view instead of create table/rule
Alex Williams <[email protected]> Wed, 09 Oct 2019 21:32:25 +0000
| Newsgroups | gmane.comp.db.postgresql.sql |
|---|---|
| Message-ID | <KAJrgQ84Kmh-_zwP7MtMPVbx32uE78hQaiAhxpdylcsiISMqRSL3UUGiJQZlbpkT4L5R6BMj-cCpBqUXK1R34HgUSq1Y3I8QjMpLBACQKDo=@protonmail.com> |
Hi Tom,
Thanks for your reply, we appreciate it. This is a long reply, sorry about =
that, but if there's any specific I can provide you that helps, please let =
me know.
OK, for the log, we do this when restoring:
pg_restore -d my_database -U postgres my_database.dump >restore_result.txt =
2>&1
but our log file only records the following (I've added more detail below u=
sing the cmds below.) The view name/column names have changed for the maili=
ng list:
"CREATE TABLE" - cat restore_result.txt | grep -A 10 -B 10 -i "CREATE TABL=
E" | more
pg_restore: [archiver (db)] Error from TOC entry 11240; 1259 42703182 TABLE=
my_view postgres
pg_restore: [archiver (db)] could not execute query: ERROR: syntax error a=
t or near "REPLICA"
LINE 19: ...E ONLY my_view REPLICA ID..
pg_restore: [archiver (db)] could not execute query: ERROR: relation "mysc=
hema.my_view " does not exist
"CREATE RULE" - cat restore_result.txt | grep -A 10 -B 10 -i "CREATE RULE" =
| more
pg_restore: [archiver (db)] Error from TOC entry 87618; 2618 42703185 RULE =
_RETURN postgres
pg_restore: [archiver (db)] could not execute query: ERROR: relation "my_v=
iew" does not exist
Command was: CREATE RULE "_RETURN" AS
ON SELECT TO my_view DO INSTEAD SELECT DISTINCT d.name AS p...
We assumed it was the create rule but also looked at "REPLICA ID" and could=
n't find anything on the properties that it had such a property ... we used=
the query from here: https://stackoverflow.com/questions/55249431/find-rep=
lica-identity-for-a-postgres-table
SELECT CASE relreplident
WHEN 'd' THEN 'default'
WHEN 'n' THEN 'nothing'
WHEN 'f' THEN 'full'
WHEN 'i' THEN 'index'
END AS replica_identity
FROM pg_class
WHERE oid =3D 'my_view'::regclass;
and it returned nothing. But I'm wondering could it be any of the tables th=
at the view uses that may have that id; I'm not sure what REPLICA ID is use=
d for, but our source DB for the dump has the the wal_level set to hot stan=
dby to sync with another server (same version) without using a dump (for fa=
ilover/readonly report queries.)
Reading this:
https://paquier.xyz/postgresql-2/postgres-9-4-feature-highlight-replica-ide=
ntity-logical-replication/
and this
https://www.postgresql.org/docs/devel/sql-altertable.html
I'm not sure what config param would set that other than the wal_level, whi=
ch in our case is hot standby not logical, but it looks like 9.2 doesn't su=
pport that property and that could be causing the issue? Also, I see the re=
plication settings in the conf file, but they are all defaulted to being co=
mmented out.
So I'm still not sure what it could be. I'm in process of restoring the db =
from 9.5.5 to 9.5.18 at the moment to see if it works (currently "my_view" =
is still a table, I'm waiting for the restore to complete to see if when th=
e rule is applied, if it hasn't yet, that it shows as a view and returns re=
cords.")
I'll see if I can extract the statements from another dump that doesn't use=
the Fc switches that we normally use, and try running them manually.
Thanks again for your help!
Alex
Sent with ProtonMail Secure Email.
=E2=80=90=E2=80=90=E2=80=90=E2=80=90=E2=80=90=E2=80=90=E2=80=90 Original Me=
ssage =E2=80=90=E2=80=90=E2=80=90=E2=80=90=E2=80=90=E2=80=90=E2=80=90
On Wednesday, October 9, 2019 1:01 AM, Tom Lane <[email protected]> wrote:
> Alex Williams [email protected] writes:
>
> > Can someone let me know when you're doing a pg_dump, can you specify no=
t to use the view rules so that the statement in the pg_dump file uses crea=
te view instead of create table/create rule?
>
> No.
>
> > We dump from 9.5.5 and restore to one 9.5.18 server and two 9.2 servers=
....we've been doing this for awhile and had no issues until recently with =
certain views that are trying to be restored with rule views (some views in=
the pg_dump file are created with create view and some by create table / c=
reate rule)
>
> In general, we don't promise that pg_dump output from major version N
> can be loaded into previous major versions. Having said that, 9.2
> should not have a problem with either the CREATE VIEW or CREATE TABLE-
> plus-CREATE RULE approaches per se, so there's some critical detail
> that you haven't told us about. You didn't show the actual error
> messages, either.
>
> regards, tom lane