Re: Updatable view and default sequence values

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

 



Jim C. Nasby wrote:
On Tue, May 16, 2006 at 04:16:55PM +0300, Kouber Saparev wrote:
The tricky part comes when I try to make my view insertable. Normally I'd insert without specifying the sequence values, but in some cases I'd want also to have full control of what's going into the underlying tables. The thing is that when I try to do it the simple way by specifying default values in the view itself:

ALTER TABLE s_purchase ALTER COLUMN purchase_sid SET DEFAULT NEXTVAL('purchase_purchase_sid_seq'); ALTER TABLE s_purchase ALTER COLUMN subscription_purchase_sid SET DEFAULT NEXTVAL('subscription_purchase_subscription_purchase_sid_seq');
You're doing ALTER TABLE on a view?

Exactly, AFAIK there's no ALTER VIEW command.

CREATE RULE s_purchase_insert AS
  ON INSERT TO s_purchase DO INSTEAD (
    INSERT INTO purchase
      (purchase_sid, data)
    VALUES
      (NEW.purchase_sid, NEW.pdata);

    INSERT INTO subscription_purchase
      (subscription_purchase_sid, purchase_sid, data)
    VALUES
      (NEW.subscription_purchase_sid, NEW.purchase_sid, NEW.sdata);
);

Why not just use CURRVAL('purchase_purchase_sid_seq') in the rule?

Because I would like to be able to insert data both by specifying and without specifying values for primary keys. For example:

INSERT INTO s_purchase (pdata, sdata) VALUES ('x', 'y');

INSERT INTO s_purchase (purchase_sid, pdata, subscription_purchase_sid, sdata) VALUES (123, 'x', 456, 'y');

If I specify CURRVAL and not NEW.primary_key, as you're proposing, I will lose the second way of adding data, cause in the latter case the values have nothing to do with the sequences, hence CURRVAL will give me completely useless, or even worse - wrong data. That's why I'm using default values of a view - if there's a value provided, it will be entered as is, if not - then the default value (nextval in this case) will be taken.

However, this solution is not robust enough. That's why I'm looking for other possible solutions. :)

--
Kouber Saparev
http://kouber.saparev.com



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux