# Unsupported database features (Prisma Schema) (Prisma ORM v7) (/docs/orm/v7/prisma-schema/data-model/unsupported-database-features) > For the complete Prisma documentation index, see [llms.txt](https://www.prisma.io/docs/llms.txt). A markdown version of any docs page is available by appending `.md` to its URL. How to support database features that do not have an equivalent syntax in Prisma Schema Language Location: ORM > v7 > Prisma Schema > Data Model > Unsupported database features (Prisma Schema) Not all database functions and features of Prisma ORM's supported databases have a Prisma Schema Language equivalent. Refer to the [database features matrix](https://www.prisma.io/docs/orm/v7/reference/database-features) for a complete list of supported features. ## Native database functions [#native-database-functions] Prisma Schema Language supports several [functions](https://www.prisma.io/docs/orm/v7/reference/prisma-schema-reference#attribute-functions) that you can use to set the default value of a field. The following example uses the Prisma ORM-level `uuid()` function to set the value of the `id` field: ```prisma model Post { id String @id @default(uuid()) } ``` However, you can also use **native database functions** to define default values with [`dbgenerated(...)`](https://www.prisma.io/docs/orm/v7/reference/prisma-schema-reference#dbgenerated) on relational databases (MongoDB does not have the concept of database-level functions). The following example uses the PostgreSQL `gen_random_uuid()` function to populate the `id` field: ```prisma model User { id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid } ``` ### When to use a database-level function [#when-to-use-a-database-level-function] There are two reasons to use a database-level function: * There is no equivalent Prisma ORM function (for example, `gen_random_bytes` in PostgreSQL). * You cannot or do not want to rely on functions such `uuid()` and `cuid()`, which are only implemented at a Prisma ORM level and do not manifest in the database. Consider the following example, which sets the `id` field to a randomly generated `UUID`: ```prisma model Post { id String @id @default(uuid()) } ``` The UUID is *only* generated if you use Prisma Client to create the `Post`. If you create posts in any other way, such as a bulk import script written in plain SQL, you must generate the UUID yourself. ### Enable PostgreSQL extensions for native database functions [#enable-postgresql-extensions-for-native-database-functions] In PostgreSQL, some native database functions are part of an extension. For example, in PostgreSQL versions 12.13 and earlier, the `gen_random_uuid()` function is part of the [`pgcrypto`](https://www.postgresql.org/docs/10/pgcrypto.html) extension. To use a PostgreSQL extension, you must first install it on the file system of your database server. You can then activate the extension by installing it via a [customized migration](https://www.prisma.io/docs/orm/v7/prisma-migrate/workflows/customizing-migrations). Add the following SQL to your migration file: ```sql CREATE EXTENSION IF NOT EXISTS pgcrypto; ``` If your project uses [Prisma Migrate](https://www.prisma.io/docs/orm/v7/prisma-migrate), you must [install the extension as part of a migration](https://www.prisma.io/docs/orm/v7/prisma-migrate/workflows/native-database-functions) . Do not install the extension manually, because it is also required by the shadow database. Prisma Migrate returns the following error if the extension is not available: ``` Migration `20210221102106_failed_migration` failed to apply cleanly to a temporary database. Database error: Error querying the database: db error: ERROR: type "pgcrypto" does not exist ``` ## Unsupported field types [#unsupported-field-types] Some database types of relational databases, such as `polygon` or `geometry`, do not have a Prisma Schema Language equivalent. Use the [`Unsupported`](https://www.prisma.io/docs/orm/v7/reference/prisma-schema-reference#unsupported) field type to represent the field in your Prisma schema: ```prisma highlight=3;normal model Star { id Int @id @default(autoincrement()) position Unsupported("circle")? @default(dbgenerated("'<(10,4),11>'::circle")) // [!code highlight] } ``` The `prisma migrate dev` and `prisma db push` command will both create a `position` field of type `circle` in the database. However, the field will not be available in the generated Prisma Client. ## Unsupported database features [#unsupported-database-features] Some features, like SQL views, cannot be represented in the Prisma schema. If your project uses [Prisma Migrate](https://www.prisma.io/docs/orm/v7/prisma-migrate), you must [include unsupported features as part of a migration](https://www.prisma.io/docs/orm/v7/prisma-migrate/workflows/unsupported-database-features) . > [!NOTE] > Partial indexes are now supported in Prisma Schema Language via the `where` argument on `@@index`, `@@unique`, and `@unique`. See [Configuring partial indexes](https://www.prisma.io/docs/orm/v7/prisma-schema/data-model/indexes#configuring-partial-indexes-with-where) for details. ## Related pages - [`Database mapping`](https://www.prisma.io/docs/orm/v7/prisma-schema/data-model/database-mapping): Learn how to map model and field names to database tables and columns - [`External tables`](https://www.prisma.io/docs/orm/v7/prisma-schema/data-model/externally-managed-tables): How to declare and use externally managed tables in Prisma ORM - [`Indexes`](https://www.prisma.io/docs/orm/v7/prisma-schema/data-model/indexes): How to configure index functionality and add full text indexes - [`Models`](https://www.prisma.io/docs/orm/v7/prisma-schema/data-model/models): Learn about the concepts for building your data model with Prisma: Models, scalar types, enums, attributes, functions, IDs, default values and more - [`Multi-schema`](https://www.prisma.io/docs/orm/v7/prisma-schema/data-model/multi-schema): How to use Prisma ORM with multiple database schemas