Обсуждение: A couple of funny things happening?

Поиск
Список
Период
Сортировка

A couple of funny things happening?

От
Christopher Sawtell
Дата:
Greetings folks,

  Doubtless it's all in my mind, but I'd love to know if these are
expected behaviours, if so, please what am I doing wrong?.
chris=# select version();
                                version
------------------------------------------------------------------------
 PostgreSQL 7.1beta3 on i586-pc-linux-gnu, compiled by GCC egcs-2.91.66
(1 row)

Udated about 2 or 3 days ago using cvsup.

chris=# \d subject
                                      Table "subject"
 Attribute |         Type          |                        Modifier
-----------+-----------------------+--------------------------------------------------------
 number    | integer               | not null default
nextval('"subject_number_seq"'::text)
 name      | character varying(20) |
Index: subject_pkey

chris=# SELECT count(number) from subject ;  #   Correct, isn't it?
ERROR:  ExecEvalAggref: no aggregates in this expression context
chris=# select * from subject ;

 number |        name
--------+--------------------
      1 | English Language
      2 | English Literature
      3 | Maori
      4 | Samoan
.
.
.
     34 | Swimming
     35 | Physical Education
     36 | Building Science
(36 rows)

The other one is about arrays vis:

 chris=# create table array_test ( number serial, data integer[] );
NOTICE:  CREATE TABLE will create implicit sequence
'array_test_number_seq' for SERIAL column 'array_test.number'
NOTICE:  CREATE TABLE/UNIQUE will create implicit index
'array_test_number_key' for table 'array_test'
CREATE
chris=# \d array_test
                                Table "array_test"
 Attribute |   Type    |                         Modifier
-----------+-----------+-----------------------------------------------------------
 number    | integer   | not null default
nextval('"array_test_number_seq"'::text)
 data      | integer[] |
Index: array_test_number_key

 chris=# select * from array_test ;
 number | data
--------+------
(0 rows)

chris=# insert  into array_test (data) values ( '{}' );
INSERT 174473 1
chris=# select * from array_test ;
 number | data
--------+------
      4 | {}
(1 row)

chris=# update array_test set data[1]=34  where number=4;
ERROR:  Invalid array subscripts

chris=# delete from array_test;
DELETE 1
chris=# insert  into array_test (data) values ( '{,}' );
INSERT 174474 1
chris=# select * from array_test ;
 number | data
--------+-------
      5 | {0,0}
(1 row)

i.e. In order to get the array able to accept any data we have to set
both data[1]=0 and data[2]=0

chris=#  update array_test set data[1]=34 where number=5;
UPDATE 1
chris=# select * from array_test ;
 number |  data
--------+--------
      5 | {34,0}
(1 row)

We are left with the unwanted datum element data[2]==0

 Is this the expected behaviour?

Thanks a 10^6

--
Sincerely etc.,

 NAME       Christopher Sawtell
 CELL PHONE 021 257 4451
 ICQ UIN    45863470
 EMAIL      csawtell @ xtra . co . nz
 CNOTES     ftp://ftp.funet.fi/pub/languages/C/tutorials/sawtell_C.tar.gz

 -->> Please refrain from using HTML or WORD attachments in e-mails to me
<<--



Re: A couple of funny things happening?

От
Tom Lane
Дата:
Christopher Sawtell <csawtell@xtra.co.nz> writes:
> chris=# SELECT count(number) from subject ;  #   Correct, isn't it?
> ERROR:  ExecEvalAggref: no aggregates in this expression context

make distclean, reconfigure, rebuild...

As I've told the last couple of people to report this same symptom,
you cannot just 'cvs update' and then 'make'.  At least not unless
you enabled dependency tracking in your last configure, and even that
I consider less than reliable.  I always do a distclean and full rebuild
after an update.

            regards, tom lane