BUG #6601: Inconsistent behavior of ALTER TABLE ADD COLUMN - Mailing list pgsql-bugs

From jon.plotky@gmail.com
Subject BUG #6601: Inconsistent behavior of ALTER TABLE ADD COLUMN
Date
Msg-id E1SKa6o-00080w-9l@wrigleys.postgresql.org
Whole thread Raw
Responses Re: BUG #6601: Inconsistent behavior of ALTER TABLE ADD COLUMN  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-bugs
The following bug has been logged on the website:

Bug reference:      6601
Logged by:          jon
Email address:      jon.plotky@gmail.com
PostgreSQL version: 8.4.7
Operating system:   RedHat Enterprise Linux 6.2 (Linux version 2.6.32)
Description:=20=20=20=20=20=20=20=20

Not sure if this is a bug or not.  Would like to know what (if any) behavior
is guaranteed about updates to the pg_attribute catalog table.

Issue: After adding one new column to each of two different tables, querying
pg_attribute shows the new column in one table but not the other.  This is a
problem for ActiveRecord, which tries to  maintain its table model based on
querying pg_attribute.

Facts:
- Behavior is repeatable on different servers/databases
- After a commit the pg_attribute table shows the new column in both tables
- Postgresql log shows difference after the two ALTER TABLE statements (see
below), with a "forked new backend" message always following the ALTER TABLE
that does not update pg_attribute. Don't know if this has anything to do
with anything, but the log messages are always the same
- No difference after adding "nop" ALTER TABLE to cause a "table rewrite" as
mentioned at http://www.postgresql.org/docs/8.4/static/sql-altertable.html


Postgresql log of ALTER TABLE that immediately updates pg_attribute:
2012-04-18 00:06:27.449 EDT|postgres|mcp_production|DEBUG:=20
StartTransactionCommand
2012-04-18 00:06:27.449 EDT|postgres|mcp_production|STATEMENT:  ALTER TABLE
"users" ADD COLUMN "fo_mapping_id" integer
2012-04-18 00:06:27.450 EDT|postgres|mcp_production|LOG:  statement: ALTER
TABLE "users" ADD COLUMN "fo_mapping_id" integer
2012-04-18 00:06:27.450 EDT|postgres|mcp_production|DEBUG:  ProcessUtility
2012-04-18 00:06:27.450 EDT|postgres|mcp_production|STATEMENT:  ALTER TABLE
"users" ADD COLUMN "fo_mapping_id" integer
2012-04-18 00:06:27.450 EDT|postgres|mcp_production|DEBUG:=20
CommitTransactionCommand
2012-04-18 00:06:27.450 EDT|postgres|mcp_production|STATEMENT:  ALTER TABLE
"users" ADD COLUMN "fo_mapping_id" integer
2012-04-18 00:06:27.452 EDT|postgres|mcp_production|DEBUG:=20
StartTransactionCommand
2012-04-18 00:06:27.452 EDT|postgres|mcp_production|STATEMENT:  SELECT id
FROM greetings WHERE user_id=3D284 limit 1


Postgresql log of ALTER TABLE that does not update pg_attribute:
2012-04-18 00:06:27.558 EDT|postgres|mcp_production|DEBUG:=20
StartTransactionCommand
2012-04-18 00:06:27.558 EDT|postgres|mcp_production|STATEMENT:  ALTER TABLE
"organizations" ADD COLUMN "default_foid" integer
2012-04-18 00:06:27.558 EDT|postgres|mcp_production|LOG:  statement: ALTER
TABLE "organizations" ADD COLUMN "default_foid" integer
2012-04-18 00:06:27.558 EDT|postgres|mcp_production|DEBUG:  ProcessUtility
2012-04-18 00:06:27.558 EDT|postgres|mcp_production|STATEMENT:  ALTER TABLE
"organizations" ADD COLUMN "default_foid" integer
2012-04-18 00:06:27.558 EDT|postgres|mcp_production|DEBUG:=20
CommitTransactionCommand
2012-04-18 00:06:27.558 EDT|postgres|mcp_production|STATEMENT:  ALTER TABLE
"organizations" ADD COLUMN "default_foid" integer
2012-04-18 00:06:27.580 EDT|||DEBUG:  forked new backend, pid=3D4626 socket=
=3D8
2012-04-18 00:06:27.580 EDT|postgres|mcp_production|DEBUG:  postgres
child[4626]: starting with (
2012-04-18 00:06:27.580 EDT|postgres|mcp_production|DEBUG:      postgres
2012-04-18 00:06:27.580 EDT|postgres|mcp_production|DEBUG:      -v196608
2012-04-18 00:06:27.580 EDT|postgres|mcp_production|DEBUG:      -y
2012-04-18 00:06:27.580 EDT|postgres|mcp_production|DEBUG:=20=20=20=20=20
mcp_production
2012-04-18 00:06:27.580 EDT|postgres|mcp_production|DEBUG:  )
2012-04-18 00:06:27.580 EDT|postgres|mcp_production|DEBUG:  InitPostgres
2012-04-18 00:06:27.580 EDT|postgres|mcp_production|DEBUG:  my backend id is
49
2012-04-18 00:06:27.581 EDT|postgres|mcp_production|DEBUG:=20
StartTransaction
2012-04-18 00:06:27.581 EDT|postgres|mcp_production|DEBUG:  name: unnamed;
blockState:       DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1,
children:
2012-04-18 00:06:27.582 EDT|postgres|mcp_production|DEBUG:=20
CommitTransaction
2012-04-18 00:06:27.582 EDT|postgres|mcp_production|DEBUG:  name: unnamed;
blockState:       STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1,
children:

pgsql-bugs by date:

Previous
From: Robert Haas
Date:
Subject: Re: BUG #6204: Using plperl functions generate crash
Next
From: Tom Lane
Date:
Subject: Re: BUG #6601: Inconsistent behavior of ALTER TABLE ADD COLUMN