cockroachdb / cockroachdb/cockroach
sql: typing too strict in PL/pgSQL function
- Dominant language
- Go
- Stars
- 32.5k
- Forks
- 4.1k
- PR merge metrics
- PR metrics pending
Description
**Describe the problem**
When creating a PL/pgSQL function, it won't allow me to implicitly cast `VARCHAR(255)` to `VARCHAR`.
**To Reproduce**
On 25.2-beta.3, I ran the following:
```sql
CREATE TABLE public.film (
film_id INT4 NOT NULL DEFAULT nextval('public.film_film_id_seq'::REGCLASS),
title VARCHAR(255) NOT NULL,
description STRING NULL,
release_year INT4 NULL,
language_id INT2 NOT NULL,
rental_duration INT2 NOT NULL DEFAULT 3:::INT8,
rental_rate DECIMAL(4,2) NOT NULL DEFAULT 4.99:::DECIMAL,
length INT2 NULL,
replacement_cost DECIMAL(5,2) NOT NULL DEFAULT 19.99:::DECIMAL,
rating public.mpaa_rating NULL DEFAULT 'G':::public.mpaa_rating,
last_update TIMESTAMP NOT NULL DEFAULT now():::TIMESTAMP,
special_features STRING[] NULL,
fulltext TSVECTOR NOT NULL,
CONSTRAINT film_pkey PRIMARY KEY (film_id ASC),
CONSTRAINT film_language_id_fkey FOREIGN KEY (language_id) REFERENCES public.language(language_id) ON DELETE RESTRICT ON UPDATE CASCADE,
INVERTED INDEX film_fulltext_idx (fulltext),
INDEX idx_fk_language_id (language_id ASC),
INDEX idx_title (title ASC),
CONSTRAINT check_release_year_release_year CHECK ((release_year >= 1901:::INT8) AND (release_year <= 2155:::INT8))
);
create or replace function get_film (
p_pattern varchar
)
returns table (
film_title varchar,
film_release_year int
)
language plpgsql
as $$
begin
return query
select
title,
release_year::integer
from
film
where
title ilike p_pattern;
end;
$$;
```
This returned the error:
```
ERROR: structure of query does not match function result type
SQLSTATE: 42804
DETAIL: Returned type VARCHAR(255) does not match expected type VARCHAR in column 1.
```
On postgres, this does not cause any error. I can successfully create the function, and call it successfully as follows:
```
SELECT * FROM get_film ('Al%');
```
**Expected behavior**
We should try to match Postgres' behavior.
Jira issue: CRDB-50592
Contributor guide
Assessment
This issue has not been assessed yet.