I have 10 tables in schema icmdb2admin each table has one column named pdfname i need to update the values in the pdfname column with L1.pdfname.V1 DECLARE
    i record;
BEGIN
    FOR i IN SELECT 'icmdb2admin.' || tablename as tbp  
             FROM pg_tables 
             WHERE schemaname = 'icmdb2admin' 
               and tablename &lt;&gt; 'department_master' 
               and tablename &lt;&gt; 'year'
               and tablename &lt;&gt; 'user_login' 
               and tablename &lt;&gt; 'filetype'  
               -- and other conditions, if needed
    LOOP 
         EXECUTE  UPDATE 'i.tbp' SET "pdfname" = 'L1.'|| pdfname || '.V1'; 
    END LOOP;
END;
You can retrieve the list of tables that have one column name pdfname by using the information_schema.columns view. It makes for clearer code.

Let's assume this is your (very simplified) scenario:

CREATE SCHEMA icmdb2admin ;
SET search_path = icmdb2admin ;

CREATE TABLE t1 (pdfname varchar(100)) ;
CREATE TABLE t2 (pdfname varchar(100)) ;
CREATE TABLE "with an awful name"(pdfname varchar(100)) ;
CREATE TABLE "no no"(i integer);

INSERT INTO t1 VALUES('hi'),('you');
INSERT INTO t2 VALUES('ha'),('you');
INSERT INTO "with an awful name" VALUES('he'),('you');


You get the list of the tables you want by means of the following query:

SELECT
    table_name
FROM
    information_schema.columns c 
WHERE
    column_name = 'pdfname' 
    AND table_schema = 'icmdb2admin' ;


That will return


| table_name         |
| :----------------- |
| t2                 |
| with an awful name |
| t1                 |


You then will use this information to EXECUTE dynamic command using PLPGSQL with any of the table names retrieved from the previous query:

DO
$$
BEGIN
    EXECUTE format('
        UPDATE
             "icmdb2admin"."%s"
        SET
             pdfname = ''L1.''|| pdfname || ''.V1''
        ', 
        't1') ;
END;
$$


That will change (only) table t1. 

NOTE: The format function allows for better readability, and adequate type formatting and prevention of SQL injection than plain concatenation.

At this point, to update all the concerned tables, you would use a loop, in a fashion similar to the one you already devised:

DO
$$
DECLARE
    tbl character varying ; -- Not the whole record, only what you're interested in
BEGIN
    for tbl IN
        SELECT
            table_name
        FROM
            information_schema.columns 
        WHERE
            column_name = 'pdfname' 
            AND table_schema = 'icmdb2admin'
            /* AND whatever else you need */
    loop
        -- raise notice '%', tbl ;  -- debugging tool
        EXECUTE format('
            UPDATE
                 "icmdb2admin"."%s"
            SET
                 pdfname = ''L1.''|| pdfname || ''.V1''
            ', 
            tbl) ;
    end loop ;
END ;
$$


And your tables will now have:

SELECT * FROM t1;



| pdfname         |
| :-------------- |
| L1.L1.hi.V1.V1  |
| L1.L1.you.V1.V1 |


SELECT * FROM t2;



| pdfname   |
| :-------- |
| L1.ha.V1  |
| L1.you.V1 |


SELECT * FROM "with an awful name";



| pdfname   |
| :-------- |
| L1.he.V1  |
| L1.you.V1 |


You can check a step-by-step example (with some limitations due to restrictions on dbfidle at dbfiddle here



NOTE: table t1 has been update twice in this example, on purpose. To avoid this possible problems, you could probably rewrite the UPDATEs adding a WHERE NOT pdfname LIKE 'L1.%.V1' to prevent double updates during testing.



References in PostgreSQL documentation:


EXECUTE
format
information_schema.columns