pgsql: Allow TRUNCATE foo, foo to succeed, per report from Nikhils.

Started by Nonameover 17 years ago12 messages
#1Noname
momjian@postgresql.org

Log Message:
-----------
Allow TRUNCATE foo, foo to succeed, per report from Nikhils.

Modified Files:
--------------
pgsql/src/backend/commands:
tablecmds.c (r1.259 -> r1.260)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/tablecmds.c?r1=1.259&r2=1.260)

#2Simon Riggs
simon@2ndquadrant.com
In reply to: Noname (#1)
Re: pgsql: Allow TRUNCATE foo, foo to succeed, per report from Nikhils.

On Wed, 2008-07-16 at 16:54 +0000, Bruce Momjian wrote:

Log Message:
-----------
Allow TRUNCATE foo, foo to succeed, per report from Nikhils.

What's the use case for this?

It's not compatibility, is it? Why would you ever do that? If you did,
why would you expect it to work? Seems more likely to be a user error
than a real request.

Should it throw one trigger call, or two?

BTW, create index foo_idx on foo (col1, col1) fails also with a strange
error message. Should we silently merge columns and ignore that also?

ERROR: duplicate key value violates unique constraint
"pg_attribute_relid_attnam_index"

Seems easier to throw errors for weird DDL like this.

e.g. create index concurrently on foo (col1); creates an index called
"concurrently" on foo, while holding locks...

--
Simon Riggs www.2ndQuadrant.com
PostgreSQL Training, Services and Support

#3Bruce Momjian
bruce@momjian.us
In reply to: Simon Riggs (#2)
Re: pgsql: Allow TRUNCATE foo, foo to succeed, per report from Nikhils.

Logically, you should be able to truncate a table twice.

---------------------------------------------------------------------------

Simon Riggs wrote:

On Wed, 2008-07-16 at 16:54 +0000, Bruce Momjian wrote:

Log Message:
-----------
Allow TRUNCATE foo, foo to succeed, per report from Nikhils.

What's the use case for this?

It's not compatibility, is it? Why would you ever do that? If you did,
why would you expect it to work? Seems more likely to be a user error
than a real request.

Should it throw one trigger call, or two?

BTW, create index foo_idx on foo (col1, col1) fails also with a strange
error message. Should we silently merge columns and ignore that also?

ERROR: duplicate key value violates unique constraint
"pg_attribute_relid_attnam_index"

Seems easier to throw errors for weird DDL like this.

e.g. create index concurrently on foo (col1); creates an index called
"concurrently" on foo, while holding locks...

--
Simon Riggs www.2ndQuadrant.com
PostgreSQL Training, Services and Support

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

#4Simon Riggs
simon@2ndquadrant.com
In reply to: Bruce Momjian (#3)
Re: pgsql: Allow TRUNCATE foo, foo to succeed, per report from Nikhils.

Yes,

TRUNCATE foo;
TRUNCATE foo;

works well.

So why do we need

TRUNCATE foo, foo;

---------------------------------------------------------------------------

On Wed, 2008-07-16 at 16:24 -0400, Bruce Momjian wrote:

Logically, you should be able to truncate a table twice.

---------------------------------------------------------------------------

Simon Riggs wrote:

On Wed, 2008-07-16 at 16:54 +0000, Bruce Momjian wrote:

Log Message:
-----------
Allow TRUNCATE foo, foo to succeed, per report from Nikhils.

What's the use case for this?

It's not compatibility, is it? Why would you ever do that? If you did,
why would you expect it to work? Seems more likely to be a user error
than a real request.

Should it throw one trigger call, or two?

BTW, create index foo_idx on foo (col1, col1) fails also with a strange
error message. Should we silently merge columns and ignore that also?

ERROR: duplicate key value violates unique constraint
"pg_attribute_relid_attnam_index"

Seems easier to throw errors for weird DDL like this.

e.g. create index concurrently on foo (col1); creates an index called
"concurrently" on foo, while holding locks...

--
Simon Riggs www.2ndQuadrant.com
PostgreSQL Training, Services and Support

--
Simon Riggs www.2ndQuadrant.com
PostgreSQL Training, Services and Support

#5Neil Conway
neilc@samurai.com
In reply to: Simon Riggs (#4)
Re: pgsql: Allow TRUNCATE foo, foo to succeed, per report from Nikhils.

On Wed, 2008-07-16 at 21:39 +0100, Simon Riggs wrote:

TRUNCATE foo;
TRUNCATE foo;

works well.

So why do we need

TRUNCATE foo, foo;

For the sake of completeness? Having "TRUNCATE foo, foo" fail would be
rather inconsistent.

-Neil

#6Simon Riggs
simon@2ndquadrant.com
In reply to: Neil Conway (#5)
Re: pgsql: Allow TRUNCATE foo, foo to succeed, per report from Nikhils.

On Wed, 2008-07-16 at 17:59 -0400, Neil Conway wrote:

On Wed, 2008-07-16 at 21:39 +0100, Simon Riggs wrote:

TRUNCATE foo;
TRUNCATE foo;

works well.

So why do we need

TRUNCATE foo, foo;

For the sake of completeness? Having "TRUNCATE foo, foo" fail would be
rather inconsistent.

Inconsistent with what exactly?

If a proposal to support this was made on hackers, it would be laughed
away. It is not required for functionality, usability, standards
compliance, backwards compatibility, robustness, performance, internal
coding simplicity, portability, marketing or external compatibility. For
what reason would we do it? Nobody has said.

And as I pointed out, other commands fail in similar circumstances.

Consistency is required, but consistency in making balanced judgements
about feature additions.

Our users will be surprised to find this was at the top of our list
ahead of other patches during a commit fest, other agreed TODO items and
other proposals from users.

--
Simon Riggs www.2ndQuadrant.com
PostgreSQL Training, Services and Support

#7Tom Lane
tgl@sss.pgh.pa.us
In reply to: Simon Riggs (#6)
Re: [COMMITTERS] pgsql: Allow TRUNCATE foo, foo to succeed, per report from Nikhils.

Simon Riggs <simon@2ndquadrant.com> writes:

On Wed, 2008-07-16 at 17:59 -0400, Neil Conway wrote:

On Wed, 2008-07-16 at 21:39 +0100, Simon Riggs wrote:

So why do we need
TRUNCATE foo, foo;

For the sake of completeness? Having "TRUNCATE foo, foo" fail would be
rather inconsistent.

Inconsistent with what exactly?

Well, it's certainly surprising that it fails entirely. And if we
actually wanted to reject the case, it should be drawing an apropos
error message. The fact is that this failure is just an implementation
issue.

Our users will be surprised to find this was at the top of our list

If it had taken more than five lines of code to fix, I might agree with
you. But we don't stop fixing bugs just because commitfest is on,
especially not trivial ones.

regards, tom lane

#8Nikhils
nikkhils@gmail.com
In reply to: Simon Riggs (#6)
Re: pgsql: Allow TRUNCATE foo, foo to succeed, per report from Nikhils.

Hi Simon,

On Thu, Jul 17, 2008 at 4:36 AM, Simon Riggs <simon@2ndquadrant.com> wrote:

On Wed, 2008-07-16 at 17:59 -0400, Neil Conway wrote:

On Wed, 2008-07-16 at 21:39 +0100, Simon Riggs wrote:

TRUNCATE foo;
TRUNCATE foo;

works well.

So why do we need

I presented a simple psql version here. I was actually processing multiple
relations in my C library in which truncate was invoked on all the involved
relations. I was passing a list of these rels to ExecuteTruncate which
barfed when the same rel was mentioned twice in that list. Its really an
implementation issue as Tom mentioned.

Regards,
Nikhils

TRUNCATE foo, foo;

For the sake of completeness? Having "TRUNCATE foo, foo" fail would be
rather inconsistent.

Inconsistent with what exactly?

If a proposal to support this was made on hackers, it would be laughed
away. It is not required for functionality, usability, standards
compliance, backwards compatibility, robustness, performance, internal
coding simplicity, portability, marketing or external compatibility. For
what reason would we do it? Nobody has said.

And as I pointed out, other commands fail in similar circumstances.

Consistency is required, but consistency in making balanced judgements
about feature additions.

Our users will be surprised to find this was at the top of our list
ahead of other patches during a commit fest, other agreed TODO items and
other proposals from users.

--
Simon Riggs www.2ndQuadrant.com
PostgreSQL Training, Services and Support

--
Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers

--
EnterpriseDB http://www.enterprisedb.com

#9Simon Riggs
simon@2ndquadrant.com
In reply to: Nikhils (#8)
Re: pgsql: Allow TRUNCATE foo, foo to succeed, per report from Nikhils.

On Thu, 2008-07-17 at 11:16 +0530, Nikhils wrote:

I presented a simple psql version here. I was actually processing
multiple relations in my C library in which truncate was invoked on
all the involved relations. I was passing a list of these rels to
ExecuteTruncate which barfed when the same rel was mentioned twice in
that list. Its really an implementation issue as Tom mentioned.

So you think we should change Postgres rather than your program?
Many people think that on list, and are ignored.

Why no bug report, proposal or patch? Why during a commit fest?

--
Simon Riggs www.2ndQuadrant.com
PostgreSQL Training, Services and Support

#10Dave Page
dpage@pgadmin.org
In reply to: Simon Riggs (#9)
Re: pgsql: Allow TRUNCATE foo, foo to succeed, per report from Nikhils.

On Thu, Jul 17, 2008 at 8:48 AM, Simon Riggs <simon@2ndquadrant.com> wrote:

On Thu, 2008-07-17 at 11:16 +0530, Nikhils wrote:

I presented a simple psql version here. I was actually processing
multiple relations in my C library in which truncate was invoked on
all the involved relations. I was passing a list of these rels to
ExecuteTruncate which barfed when the same rel was mentioned twice in
that list. Its really an implementation issue as Tom mentioned.

So you think we should change Postgres rather than your program?
Many people think that on list, and are ignored.

Why no bug report, proposal or patch? Why during a commit fest?

Huh? There was a bug report, with suggested fix on June 5th from
Nikhil - http://archives.postgresql.org/pgsql-hackers/2008-06/msg00231.php

No-one responded, and over a month later Bruce fixed the bug, pointing
out that TRUNCATE is now consistent with LOCK.

The fact that Bruce fixed it during a commit fest is irrelevant. Bug
fixes don't stop for commit fests, feature freeze's or even releases
in many cases - and surely we're not going to tell Bruce he cannot
distract himself with a totally different task for 30 minutes or
however long it took?

--
Dave Page
EnterpriseDB UK: http://www.enterprisedb.com

#11Simon Riggs
simon@2ndquadrant.com
In reply to: Dave Page (#10)
Re: pgsql: Allow TRUNCATE foo, foo to succeed, per report from Nikhils.

On Thu, 2008-07-17 at 09:00 +0100, Dave Page wrote:

On Thu, Jul 17, 2008 at 8:48 AM, Simon Riggs <simon@2ndquadrant.com> wrote:

On Thu, 2008-07-17 at 11:16 +0530, Nikhils wrote:

I presented a simple psql version here. I was actually processing
multiple relations in my C library in which truncate was invoked on
all the involved relations. I was passing a list of these rels to
ExecuteTruncate which barfed when the same rel was mentioned twice in
that list. Its really an implementation issue as Tom mentioned.

So you think we should change Postgres rather than your program?
Many people think that on list, and are ignored.

Why no bug report, proposal or patch? Why during a commit fest?

Huh? There was a bug report, with suggested fix on June 5th from
Nikhil - http://archives.postgresql.org/pgsql-hackers/2008-06/msg00231.php

No-one responded, and over a month later Bruce fixed the bug, pointing
out that TRUNCATE is now consistent with LOCK.

The fact that Bruce fixed it during a commit fest is irrelevant. Bug
fixes don't stop for commit fests

OK, my mistake. Comments withdrawn, with apologies.

--
Simon Riggs www.2ndQuadrant.com
PostgreSQL Training, Services and Support

#12Bruce Momjian
bruce@momjian.us
In reply to: Simon Riggs (#11)
Re: pgsql: Allow TRUNCATE foo, foo to succeed, per report from Nikhils.

Simon Riggs wrote:

Huh? There was a bug report, with suggested fix on June 5th from
Nikhil - http://archives.postgresql.org/pgsql-hackers/2008-06/msg00231.php

No-one responded, and over a month later Bruce fixed the bug, pointing
out that TRUNCATE is now consistent with LOCK.

The fact that Bruce fixed it during a commit fest is irrelevant. Bug
fixes don't stop for commit fests

OK, my mistake. Comments withdrawn, with apologies.

The ugly truth is that my schedule is now so crazy with travel that I am
having to catch up with community emails that need attention anytime I
have the chance, rather than at appropriate times.

Recent schedule:

	-1 week, church mission trip to Pittsburgh
	+1 week, OSCON
	+3 weeks, Linuxworld
	+6 weeks, Brasilia conference

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +