Voeg een unieke beperking toe aan een Postgresql-weergave

Allemaal,

Is er een manier om een ​​unieke beperking toe te voegen aan een Postgresql-weergave?

CREATE OR REPLACE VIEW export AS
 (SELECT nextval('export_view'::regclass)::integer AS pid, getdata.id, getdata.service, getdata.title, getdata.date_taken, getdata.date_inserted, getdata.url, 
    regexp_replace(getdata.description, E'[\\n\\r]+', ' ', 'g') AS description, getdata.geom
   FROM getdata)

Ik heb elke combinatie geprobeerd om dit ding als een reguliere tafel te laten werken, maar het werkt nog steeds niet zoals nodig.

Bedankt, Adam

1
Technisch gezien zijn pid en id beide uniek, maar ik veronderstel dat pid altijd universeel uniek zal zijn. pastebin.com/1sznU09i <= Ik probeer een weergave in een bureaubladtoepassing te laden en deze doet dit niet zoals alles wat ik probeer.
toegevoegd de auteur aeupinhere, de bron

2 antwoord

U kunt een functie schrijven om de integriteit van de gegevens te controleren die door de weergave zijn geselecteerd. Vervolgens voegt u een na-trigger toe aan elke tabel die in de weergave wordt gebruikt om uw functie aan te roepen. Wanneer de zelf gemaakte integriteitsbeperkingscontrole een overtreding detecteert, kan uw trigger een uitzondering genereren om de transactie af te breken.

Het hebben van deze triggerconstructie zou beperkingen op views moeten simuleren, maar is ook behoorlijk fragiel. Helaas lijkt er geen inheemse faciliteit te zijn om beperkingen aan weergaven toe te voegen.

3
toegevoegd

Geen weergaven zijn wrappers over tabellen. Je moet een beperking op tafel leggen.

0
toegevoegd
Het lijkt erop dat van je pastebin je alleen een unieke id nodig hebt die is opgenomen in je weergave-uitvoer. Wat als je een rownum hebt toegevoegd om te zien of je software dat accepteert? Maak voor het plezier de weergave met slechts 1, 'XYZ' UNION select 2, 'ABC'; Is jouw app zo?
toegevoegd de auteur Kuberchaun, de bron