Ini adalah "fitur" yang membingungkan dengan sedikit sejarah. Secara khusus, Anda bisa merujuk ke tupel dari tabel secara keseluruhan dengan nama tabel, dan kemudian menambahkan .name
akan memanggil name
fungsi pada mereka (yaitu akan ditafsirkan sebagai select name(t) from t
).
Di beberapa titik dalam pengembangan PostgreSQL 9, Istr ini sedikit dibersihkan. Anda masih dapat melakukan select t from t
secara eksplisit untuk mendapatkan efek baris sebagai tupel, tetapi Anda tidak dapat menerapkan fungsi dengan cara yang sama. Jadi di PostgreSQL 8.4.9 , ini:
create table t(id serial primary key, value text not null);
insert into t(value) values('foo');
select t.name from t;
menghasilkan yang aneh:
name
---------
(1,foo)
(1 row)
tetapi pada 9.1.1 menghasilkan:
ERROR: column t.name does not exist
LINE 1: select t.name from t;
^
seperti yang Anda harapkan.
Jadi, untuk menjawab pertanyaan Anda secara spesifik:name
adalah tipe standar di PostgreSQL (digunakan dalam katalog untuk nama tabel dll) dan juga beberapa fungsi standar untuk mengubah sesuatu menjadi name
Tipe. Itu tidak benar-benar dicadangkan, hanya objek yang ada yang disebut itu, ditambah beberapa sintaks aneh historis, membuat segalanya membingungkan; dan ini telah diperbaiki oleh pengembang di versi terbaru.