From: | Keith <keith(at)keithf4(dot)com> |
---|---|
To: | Marco Piovan <mpiovan(at)workwave(dot)com> |
Cc: | pgsql-admin <pgsql-admin(at)postgresql(dot)org> |
Subject: | Re: set not null column using existing constraint |
Date: | 2018-01-10 15:51:45 |
Message-ID: | CAHw75vvfAvNmuSa3rZORo=son4nEGC2+ADMi7w+Ws3O1Zv=f+g@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-admin |
On Wed, Jan 10, 2018 at 7:09 AM, Marco Piovan <mpiovan(at)workwave(dot)com> wrote:
> Hello,
> I want to create a primary key using an existing unique index.
> I have already created the index concurrently and I have already validated
> a not null constraint on the same column.
>
> Looking at the postgres documentation (https://www.postgresql.org/
> docs/9.6/static/sql-altertable.html):
>
> "If PRIMARY KEY is specified, and the index's columns are not already
> marked NOT NULL, then this command will attempt to do ALTER COLUMN SET
> NOT NULL against each such column. That requires a full table scan to
> verify the column(s) contain no nulls. In all other cases, this is a fast
> operation."
>
> Is it possible to specify the already validated not null constraint and
> avoid another scan of the table (with lock)?
>
> Best regards
>
> --
> Marco Piovan
>
As the docs say, If the NOT NULL constraint exists on the given column and
is valid, it will not do the full table scan. Just use the USING clause to
the command to set the primary key giving it the unique index you already
made.
ALTER TABLE ... ADD PRIMARY KEY USING unique_index;
No need to specify the constraint.
From | Date | Subject | |
---|---|---|---|
Next Message | Rui DeSousa | 2018-01-10 16:00:03 | Re: set not null column using existing constraint |
Previous Message | Damir Colak | 2018-01-10 14:06:02 | Re: pgAdmin Import/export does not show a progress dialog on mac |