Search code examples
postgresqlquoted-identifier

Why am I getting syntax error at or near "@"


When trying to join two tables and update one of them, I'm receiving an unexpected error from this function right here:

CREATE OR REPLACE FUNCTION tsi.update_data(_creation_time int)
RETURNS VOID
AS $$
BEGIN
    EXECUTE format($sql$
        UPDATE tsi.forecasts_%s a SET
        a."incidents @ 01:00" = b.n_incid,
        a."road @ 01:00" = b.n_roads
        FROM tgi_tmp b WHERE a.link_ix = b.link_id;
  $sql$,_creation_time);
END $$ LANGUAGE plpgsql;

It gives me this error message:

syntax error at or near "@"
cidents @ 01:00" = n_incid,
        ^

Do anyone know why I'm getting this error? The tables do contain the mentioned columns, so that is not the problem. Is postgres having a hard time dealing with string-columns in an Execute-format?

Postgres version: 10.5 Simplified table structure:

CREATE TABLE tsi.forecasts_%s (
    link_ix int PRIMARY KEY,
    "slipincidents @ 00:00" SMALLINT NOT NULL,
    "roadcoverage @ 00:00" SMALLINT NOT NULL,
);

and tgi_tmp:

CREATE TEMPORARY TABLE tgi_tmp (
    link_id TEXT,
    n_road SMALLINT,
    n_incid SMALLINT
    CONSTRAINT tgi_tmp_pkey PRIMARY KEY (link_id)
);

Solution

  • Works for some reason when I'm not specifying the offset. Like this:

     CREATE OR REPLACE FUNCTION tsi.update_data(_creation_time int)
     RETURNS VOID
    
        AS $$
        BEGIN
            EXECUTE format($sql$
                UPDATE tsi.forecasts_%s a SET
                "incidents @ %s" = b.n_incid,
                "road @ %s" = b.n_roads
                FROM tgi_tmp b WHERE a.link_ix = b.link_id;
          $sql$,_creation_time, '01:00', '01:00');
        END $$ LANGUAGE plpgsql;