TIMESTAMPTZ + INTERVAL is STABLE (depends on timezone), not IMMUTABLE, so PostgreSQL rejects it in GENERATED ALWAYS AS STORED columns. Fix: remove generated column and compute expires_at inline in each query as (added_at + storage_days * INTERVAL '1 day'). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
20 lines
757 B
SQL
20 lines
757 B
SQL
-- +goose Up
|
|
CREATE TABLE products (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
mapping_id UUID REFERENCES ingredient_mappings(id),
|
|
name TEXT NOT NULL,
|
|
quantity DECIMAL(10, 2) NOT NULL DEFAULT 1,
|
|
unit TEXT NOT NULL DEFAULT 'pcs',
|
|
category TEXT,
|
|
storage_days INT NOT NULL DEFAULT 7,
|
|
added_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
-- expires_at is computed as (added_at + storage_days * INTERVAL '1 day') in queries.
|
|
-- A stored generated column cannot be used because timestamptz + interval is STABLE, not IMMUTABLE.
|
|
CREATE INDEX idx_products_user_id ON products(user_id);
|
|
|
|
-- +goose Down
|
|
DROP TABLE products;
|