我開始使用PostgreSQL視圖,因爲它們對我的用例很有用,並且會提供比函數更好的性能。 (這不相關,但我在Heroku Postgres —上使用Django 1.7以防萬一)。PostgreSQL視圖的INSERT或UPDATE
我已經創建了一個視圖,可以很好地查詢它。我想在視圖周圍編寫一個Django包裝器,以便我可以像處理表一樣處理它,並相應地查詢並寫入它。我一直在評論 Postgres docs on INSERT
and UPDATE
for views,但說實話,我發現他們的文檔很難閱讀,我幾乎無法解析他們在說什麼。
比方說,我有以下看法:
CREATE OR REPLACE VIEW links AS
SELECT
listing.id AS listing_id,
CONCAT('/i-', industry.slug, '-j-', listing.slug, '/') AS link,
'https://www.example.com' || CONCAT(industry.slug, '-SEP-', listing.slug, '/') AS full_link,
listing.slug AS listing_slug,
industry.slug AS industry_slug
FROM listing
INNER JOIN company ON company.id = listing.company_id
INNER JOIN industry ON industry.id = company.industry_id
在這裏,我使用industry.slug
和listing.slug
建立聯繫。我希望能夠更新從該視圖這兩個領域,因爲這樣的:
UPDATE links
SET listing_slug = 'my-new-slug'
WHERE listing_id = 5;
如何創建規則正確做到這一點?
因爲它不是一個的simpy更新視圖(已連接),你需要寫一個'DO INSTEAD'規則或觸發。規則是複雜的,很難得到正確的,所以我會使用觸發器。 –