                              Table "public.portfolioprojects"
    Column     |            Type             | Collation | Nullable |        Default        
---------------+-----------------------------+-----------+----------+-----------------------
 id            | text                        |           | not null | 
 categoryid    | text                        |           | not null | ''::text
 title         | character varying(255)      |           | not null | ''::character varying
 description   | text                        |           |          | ''::text
 featuredimage | character varying(500)      |           |          | ''::character varying
 images        | text                        |           |          | '[]'::text
 displayorder  | integer                     |           |          | 0
 isactive      | boolean                     |           |          | true
 createdat     | timestamp without time zone |           |          | CURRENT_TIMESTAMP
 updatedat     | timestamp without time zone |           |          | CURRENT_TIMESTAMP
 category      | character varying(255)      |           |          | 
 imageurl      | character varying(500)      |           |          | 
Indexes:
    "portfolioprojects_pkey" PRIMARY KEY, btree (id)
    "idx_portfolio_active_display" btree (isactive, displayorder, createdat DESC) WHERE isactive = true
    "idx_portfolio_category" btree (category) WHERE isactive = true
    "idx_portfolio_createdat" btree (createdat DESC) WHERE isactive = true
    "idx_portfolio_displayorder" btree (displayorder, createdat DESC) WHERE isactive = true
    "idx_portfolio_isactive" btree (isactive) WHERE isactive = true
Check constraints:
    "check_displayorder_nonnegative" CHECK (displayorder >= 0)
Triggers:
    trg_portfolioprojects_update BEFORE UPDATE ON portfolioprojects FOR EACH ROW EXECUTE FUNCTION update_timestamp()

