How to Fix Error “could not determine polymorphic type because input has type unknown” when using array_shuffle() in PostgreSQL

If you’re getting an error that reads “could not determine polymorphic type because input has type unknown” when using the array_shuffle() function in PostgreSQL, it’s probably because your argument is of the wrong type.

The array_shuffle() function requires an array as its argument. Passing a non-array value will result in an error. The actual error can vary, depending on the argument you pass, but either way, the error is usually due to a non-array argument being passed.

To fix this error, be sure to pass an array as the argument when calling the array_shuffle() function.

Example of Error

Here’s an example of code that produces the error:

SELECT array_shuffle( 'Cat' );

Result:

ERROR:  could not determine polymorphic type because input has type unknown

I got the error because my argument wasn’t an array. The “polymorphic type” part refers to the fact that the array_shuffle() function is a polymorphic function. That is, it accepts a polymorphic type as an argument. In this case the argument can be any array type.

Polymorphic types enable a single function definition to operate on many different data types, with the specific data type(s) being determined by the data types actually passed to it in a particular call.

Solution

We can fix the problem by passing an array to the function:

SELECT array_shuffle( ARRAY[ 'Cat', 'Dog', 'Bird', 'Fox' ] );

Result:

   array_shuffle    
--------------------
{Bird,Cat,Fox,Dog}

This time the function worked without error. That’s because we passed an array this time.