Odd behavior observed - Mailing list pgsql-general

From Marc Evans
Subject Odd behavior observed
Date
Msg-id 20060919124732.Y27583@me.softwarehackery.com
Whole thread Raw
In response to Re: vista  (Martijn van Oosterhout <kleptog@svana.org>)
Responses Re: Odd behavior observed  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-general
Hello -

I am observing odd behavior that I am wondering if anyone here may have an
idea of how better to debug. I am suspecting a bug in the pgsql code, but
would be happy to find it is my error.

My specific situation is that I am using version 8.1.4 on a FreeBSD 6.1
AMD-64 system. I have a table with about 15000 records in it, which I
would like to add a new column to. The alter command shows success.
However, testing inserts reveals that the data for the new column is never
stored. Running the same exercise against the identical schema but with
only a few records finds that the test succeeds, and hence the problem is
not easily recreated. Experimentation has shown that the type of the
column doesn't matter. If the column has NOT NULL DEFAULT {value} added,
then it magically works.

A trivial example of the exercise is shown here:

create table foo (id bigserial);
insert into foo (id) values (8);
alter table foo add source_record bigint;
insert into foo (id,source_record) values (10,20);
select * from foo;
  id | source_record
----+---------------
   8 |
  10 |            20

If I populate the table foo above with 15000 records, the exercise still
works OK. The only difference that I and others staring at this problem
see is that the real-world table contains a more complex definition,
included here for reference:

        Column       |            Type             |                        Modifiers
--------------------+-----------------------------+---------------------------------------------------------
  id                 | bigint                      | not null default nextval('audit_logs_id_seq'::regclass)
  timestamp          | timestamp without time zone | not null default now()
  notify_at          | timestamp without time zone |
  audit_log_type_id  | bigint                      | not null
  sdp_id             | bigint                      |
  customer_id        | bigint                      |
  customer_region_id | integer                     |
  audit_format_id    | bigint                      | not null
  msg_args           | text[]                      |
  arg_names          | text[]                      |
  source_record      | bigint                      |
Indexes:
     "audit_logs_pkey" PRIMARY KEY, btree (id)
Foreign-key constraints:
     "audit_logs_audit_format_id_fkey" FOREIGN KEY (audit_format_id) REFERENCES audit_formats(id) ON DELETE RESTRICT
     "audit_logs_audit_log_type_id_fkey" FOREIGN KEY (audit_log_type_id) REFERENCES audit_log_types(id) ON DELETE
RESTRICT
     "audit_logs_audit_log_type_id_fkey1" FOREIGN KEY (audit_log_type_id) REFERENCES audit_log_types(id) ON DELETE
RESTRICT
     "audit_logs_customer_id_fkey" FOREIGN KEY (customer_id) REFERENCES customers(id) ON DELETE RESTRICT
     "audit_logs_customer_region_id_fkey" FOREIGN KEY (customer_region_id) REFERENCES customer_regions(id) ON DELETE
RESTRICT
     "audit_logs_sdp_id_fkey" FOREIGN KEY (sdp_id) REFERENCES sdps(id) ON DELETE RESTRICT
Triggers:
     audit_log_delete_trigger BEFORE DELETE ON audit_logs FOR EACH ROW EXECUTE PROCEDURE audit_log_delete_restrict()


Does anybody have a suggestion about how to debug this?

Thanks in advance - Marc

pgsql-general by date:

Previous
From: "Joshua D. Drake"
Date:
Subject: Re: vista
Next
From: Chris Browne
Date:
Subject: Re: vista