Re: How hard would a "path" operator be to implement in PostgreSQL
| От | Chris Travers |
|---|---|
| Тема | Re: How hard would a "path" operator be to implement in PostgreSQL |
| Дата | |
| Msg-id | CAKt_ZftXBajnn26xGt261zgJU5xXo6D_Ve1QgpApSHDS-94sGw@mail.gmail.com обсуждение исходный текст |
| Ответ на | Re: How hard would a "path" operator be to implement in PostgreSQL (Craig Ringer <ringerc@ringerc.id.au>) |
| Список | pgsql-general |
Hi all;
So I found an interesting and relatively manageable way of doing this.
Suppose we have an inventory table:
CREATE TABLE inventory_item (
id serial primary key,
cogs_account_id int references account(id),
inv_account_id int references account(id),
income_account_id int references account(id),
sku text not null,
description text,
last_cost numeric, -- null if never purchased
sell_price numeric not null,
active bool not null default true
);
Now we want to be able to add pointers to this table in other tables
without adding a lot of decentralized code. So what we do is:
CREATE TABLE joins_inventory_item (
inventory_item_id int
);
Then we create a table method function like:
CREATE FUNCTION inventory_item(joins_inventory_item) RETURNS inventory_item
LANGUAGE SQL AS $$
SELECT * FROM inventory_item where id = $1.inventory_item_id;
$$;
Then any table which inherits joins_inventory_item gets a path back.
So for example:
CREATE TABLE inventory_barcode (
barcode text primary key;
FOREIGN KEY inventory_item_id REFERENCES inventory_item(id)
);
Then we can:
select (bc.inventory_item).sku FROM inventory_barcode bc WHERE barcode
= '12345';
Best Wishes,
Chris Travers
В списке pgsql-general по дате отправления: