I am using the evaluation version of the Devart.Data.PostgreSql provider version 6.4.164, with version 5.0.623.0 of Devart.Data.
I have a postgres function that returns TABLE. It's working. It returns 100 rows with 30 columns. I tested it with npgsql provider and 100 rows with 30 columns come back to the client. However, when I substitute the Devart types for the npgsql types, and invoke the function, the column-names are returned but the set is empty, zero rows.
BTW, npgsql doesn't appear to support named parameter mode, only positional mode, when command is CommandType.StoredProcedure, so we are evaluating both devart and npgsql providers -- just saying so because I don't want you to think I'm a troll. I got called a troll over on MSFT SQL Server forum when trying to get them to make their Time datatype ISO8601 compliant.

Anyway, Npgsql has a connection parameter called Preload Reader which forces the reader to fetch all of the data before returning. Is there a similar setting for the devart connection? Or is there an additional step I must take to get the PgSqlDataReader to fetch all of the data, not just the metadata?
Here's my code for the pg function:
.
. <snip>
.
myPgSqlCommand.Connection.Open();
PgSqlDataReader dr = myPgSqlCommand.ExecuteReader();
// at this point, dr.FieldCount = 30
while (dr.Read() )
{
// we never reach this code block
}