# Structural differences and limitations with Salesforce

{% hint style="info" %}
**Required license:** Professional or Enterprise
{% endhint %}

## Table mode limitations <a href="#salesforce-limits-table-mode" id="salesforce-limits-table-mode"></a>

You can only assign the De-Identify or Truncate table modes.

## Generator limitations <a href="#salesforce-limits-generators" id="salesforce-limits-generators"></a>

Salesforce does not support any of the [primary key generators](https://docs.tonic.ai/app/generation/generators/generator-types/primary-key-generators). These are:

* Alphanumeric String Key
* ASCII Key
* Integer Key
* Numeric String Key
* UUID Key

## Subsetting limitations <a href="#salesforce-limits-subsetting" id="salesforce-limits-subsetting"></a>

When you configure subsetting for a Salesforce workspace, you cannot filter optional records.

## No upsert <a href="#salesforce-limits-upsert" id="salesforce-limits-upsert"></a>

Salesforce workspaces do not support upsert.

## No post-job scripts <a href="#salesforce-limits-post-job-scripts" id="salesforce-limits-post-job-scripts"></a>

For Salesforce workspaces, there is no option to run post-job scripts after a job.

You can create [webhooks](https://docs.tonic.ai/app/workflows/webhooks) that are triggered by data generation jobs.

## No output to a container repository <a href="#salesforce-limits-output-to-container" id="salesforce-limits-output-to-container"></a>

For Salesforce workspaces, you cannot write the destination data to a container repository.
