Search Postgresql Archives

Re: unique amount more than one table

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 04/05/2011 04:02 PM, Perry Smith wrote:
I have five tables each with a "name" field.  Due to limitations in my user interface, I want a name to be unique amoung these 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 my approach and have my unique_xxx function see if the name to be added is already in the xxx view but it is at that point that 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



You might try making a separate name table and having a unique index there and make the other users of name refer to the new table's name field. (I would stick on id on the new name table...)

--
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux