COPY documentation with regard to references constraints

Started by Bruno Wolff IIIover 1 year ago4 messagesgeneral
Jump to latest
#1Bruno Wolff III
bruno@wolff.to

I was unable to find any documentation clarifying if using COPY to load a
table with rows referencing others rows in the same table, whether I
had to worry about ordering of the input.
What I found (in 17) is that even if the references constraint wasn't
set as deferrable, I could have rows for children before their parents
in the COPY data and things still worked.

#2Dominique Devienne
ddevienne@gmail.com
In reply to: Bruno Wolff III (#1)
Re: COPY documentation with regard to references constraints

On Thu, Oct 31, 2024 at 1:04 PM Bruno Wolff III <bruno@wolff.to> wrote:

I was unable to find any documentation clarifying if using COPY to load a
table with rows referencing others rows in the same table, whether I
had to worry about ordering of the input.
What I found (in 17) is that even if the references constraint wasn't
set as deferrable, I could have rows for children before their parents
in the COPY data and things still worked.

AFAIK, DEFERRABLE is for temporary violations crossing statement boundaries,
to postpone the enforcement of FKs at COMMIT time of the transaction.

While a single COPY is just one statement, so whether a temporary violation
for self-referential FKs would occur would be implementation-dependent,
and thus "neither logical" nor predictable.

Applies to other statement types too.

But of course, more authoritative answers will come I'm sure. --DD

#3Bruno Wolff III
bruno@wolff.to
In reply to: Dominique Devienne (#2)
Re: COPY documentation with regard to references constraints

On Thu, Oct 31, 2024 at 13:15:34 +0100,
Dominique Devienne <ddevienne@gmail.com> wrote:

AFAIK, DEFERRABLE is for temporary violations crossing statement boundaries,
to postpone the enforcement of FKs at COMMIT time of the transaction.

While a single COPY is just one statement, so whether a temporary violation
for self-referential FKs would occur would be implementation-dependent,
and thus "neither logical" nor predictable.

Applies to other statement types too.

Thanks. I needed to look more carefully under deferrable where it says
the following:
This controls whether the constraint can be deferred. A constraint that is
not deferrable will be checked immediately after every command.

That is pretty clear.

#4Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Bruno Wolff III (#1)
Re: COPY documentation with regard to references constraints

On Thu, 2024-10-31 at 06:38 -0500, Bruno Wolff III wrote:

I was unable to find any documentation clarifying if using COPY to load a
table with rows referencing others rows in the same table, whether I
had to worry about ordering of the input.

I cannot find it in the documentation either, but since COPY is a single
statement and foreign key constraints are checked at the end of the
statement, it should work fine.

Yours,
Laurenz Albe