Format
The PostgreSQL Transport address canonical form is a schema-qualified quoted identifier:
""table"".""schema""
Resolution
The address is resolved into a fully-qualified table name that includes the table name and its schema. In the address, the table name is the only mandatory part. An address containing only a table name is a valid address, e.g. MyTable
.
Schema
The PostgreSQL transport needs to know what schema to use for a queue table when sending messages. The following API can be used to specify the schema for an endpoint when routing is used to find a destination queue table for a message:
var routing = endpointConfiguration.UseTransport(new PostgreSqlTransport("connectionString"));
routing.RouteToEndpoint(typeof(MyMessage), "MyEndpoint");
routing.UseSchemaForEndpoint(endpointName: "MyEndpoint", schema: "my_schema");
There are several cases when routing is not used and the transport needs specific configuration to find out the schema for a queue table:
- Error queue
- Audit queue
- ServiceControl plugin queues
- Overriding the default routing mechanism
Use the following API to configure the schema for a queue:
var transport = new PostgreSqlTransport("connectionString");
transport.Schema.UseSchemaForQueue(queueName: "myqueue", schema: "my_schema");
transport.Schema.UseSchemaForQueue(queueName: "myerror", schema: "sc");
The configuration above is applicable when sending to a queue or when a queue is passed in the configuration:
await messageSession.Send("myqueue", new MyMessage());
endpointConfiguration.SendFailedMessagesTo("myerror");
If the queue name contains a "." and the first part is not a schema name, enclose the queue name in quotes.
endpointConfiguration.SendHeartbeatTo("\"Particular.ServiceControl\"");
The entire algorithm for calculating the schema is the following:
- If the schema is configured for a given queue via
UseSchemaForQueue
, the configured value is used. - If logical routing is used and schema is configured for a given endpoint via
UseSchemaForEndpoint
, the configured schema is used. - If destination address contains a schema, the schema from address is used.
- If default schema is configured via
DefaultSchema
, the configured value is used. - Otherwise,
public
is used as a default schema.