unique amount more than one table

Поиск
Список
Период
Сортировка
От Perry Smith
Тема unique amount more than one table
Дата
Msg-id 679DDAB8-01B2-4F7F-A51C-A8512C265B07@gmail.com
обсуждение исходный текст
Ответы Re: unique amount more than one table  (Jeff Davis <pgsql@j-davis.com>)
Re: unique amount more than one table  (David Johnston <polobo@yahoo.com>)
Re: unique amount more than one table  (Rob Sargent <robjsargent@gmail.com>)
Список pgsql-general
I have five tables each with a "name" field.  Due to limitations in my user interface, I want a name to be unique
amoungthese five tables. 

I thought I could first create a view with something like:

SELECT name, 'table1' as type from table1
  UNION ALL
SELECT name, 'table2' as type from table2
  UNION ALL
SELECT name, 'table3' as type from table3
 ...

I called this view xxx (I'm just experimenting right now).

I then created a function:

CREATE OR REPLACE FUNCTION unique_xxx ( ) RETURNS boolean AS $$
       SELECT ( SELECT max(cnt) FROM ( SELECT count(*) AS cnt FROM xxx GROUP BY name ) AS foo ) = 1;
$$ LANGUAGE SQL;

Next I added a check constraint with:

ALTER TABLE table1 ADD CHECK ( unique_xxx() );

A test shows:

select unique_xxx();
 unique_xxx
------------
 t
(1 row)

After I insert a row that I want to be rejected, I can do:

select unique_xxx();
 unique_xxx
------------
 f
(1 row)

but the insert was not rejected.  I'm guessing because the check constraint runs before the insert?  So, I could change
myapproach and have my unique_xxx function see if the name to be added is already in the xxx view but it is at that
pointthat I stopped and thought I would ask for advice.  Am I close or am I going down the wrong road? 

Thank you for your time,
pedz


В списке pgsql-general по дате отправления:

Предыдущее
От: John R Pierce
Дата:
Сообщение: Re: Out of memory
Следующее
От: Jeff Davis
Дата:
Сообщение: Re: unique amount more than one table