dbml icon indicating copy to clipboard operation
dbml copied to clipboard

Workaround for column un-supported settings doesn't work

Open gguy0406 opened this issue 1 year ago • 1 comments

Problem

The workaround for un-supported settings by adding the setting name into the column type name, such as id “bigint unsigned” [pk] doesn't work

Example

Take an example DBML file:

Table Product {
  id integer [increment, pk]
  price "integer check (price > 0)" [not null]
  quantity "integer check(quantity > 0) [default: 0, not null]
}

When I convert that to Postgresql, it looks like:

CREATE TABLE "Product " (
  "id" INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
  "price" "integer check (price > 0)" NOT NULL,
  "quantity" "integer check (quantity > 0)" NOT NULL DEFAULT 0,
);

Which then throwing error when attempting to execute query pq: type "integer check (totalPrice > 0)" does not exist

gguy0406 avatar Jul 17 '24 14:07 gguy0406

Hi,

Currently, there's no way to add check constraint and other unsupported settings so the the export SQL is correctly equivalent.

The work-around is only mean to make the dbml valid. Instead of putting the constraint in the column type, you can try to annotate the constraint in field note, like this:

Table Product {
  id integer [increment, pk]
  price integer [not null, note: "check (price > 0)"]
  quantity integer [default: 0, not null, note: "check (quantity > 0)"]
}

Which will export to Postgresql without error, but you'll have to add the check constraint back mannually.

We'll consider support the CHECK constraint in the future as well, since it is a common problem.

NQPhuc avatar Jul 18 '24 04:07 NQPhuc

Check constraints have been supported in version ^v5.0.0: https://dbml.dbdiagram.io/docs/#check-definition

H-DNA avatar Nov 04 '25 01:11 H-DNA