IF NOT EXISTS | Used to specify that the policy will only be created if one with the same policy_name does not already exist on table_name. If a policy with that name does already exist, the statement will not return an error if this parameter is used. |
policy_name | Unique identifier for the policy on the table. |
table_name | The table to which the policy applies. |
AS ( PERMISSIVE, RESTRICTIVE ) | (Default: PERMISSIVE.) For PERMISSIVE, combine policies using OR: a row is accessible if any permissive policy grants access. For RESTRICTIVE, combine policies using AND: a row is accessible if all restrictive policies grant access. The overall policy enforcement is determined logically as: {permissive policies} AND {restrictive policies}: restrictive policies are evaluated after permissive policies. This means that at least one PERMISSIVE policy must be in place before RESTRICTIVE policies are applied. If any restrictive policy denies access, the row is inaccessible, regardless of the permissive policies. |
FOR ( ALL, SELECT, INSERT, UPDATE, DELETE ) | (Default: ALL.) Specifies the SQL statement(s) the policy applies to: (SELECT, INSERT, UPDATE, DELETE). For details, refer to Policies by statement type. |
TO role_name, ... | (Default: PUBLIC, which means the policy applies to all roles.) Specifies the database role(s) to which the policy applies. |
USING ( using_expression ) | Defines the filter condition such that only rows for which the using_expression evaluates to TRUE are visible or available for modification. Rows evaluating to FALSE or NULL are silently excluded. Note this the expression is evaluated before any data modifications are attempted. The filter condition applies to SELECT, UPDATE, DELETE, and INSERT (for INSERT ... ON CONFLICT DO UPDATE). |
WITH CHECK ( check_expression ) | Defines a constraint condition such that rows being inserted or updated must satisfy check_expression (i.e., must evaluate to TRUE). This expression is evaluated after the row data is prepared but before it is written. If the expression evaluates to FALSE or NULL, the operation fails with an RLS policy violation error. Applies to INSERT and UPDATE. If this expression is omitted, it will default to the USING expression for new rows in an UPDATE or INSERT. |