Thread

  1. pg_dump/restore syntax checking bug?

    Joshua D. Drake <jd@commandprompt.com> — 2013-03-23T04:35:47Z

    Hello,
    
    In testing some pg_restore functionality I found the following:
    
    postgres@jd-laptop:~$ pg_dump -U postgres -Fc -s --file=foo.sqlc
    postgres@jd-laptop:~$ dropdb test;
    postgres@jd-laptop:~$ createdb test;
    postgres@jd-laptop:~$ pg_restore -d test -P 'by()' foo.sqlc
    postgres@jd-laptop:~$ psql -U postgres test
    psql (9.1.8)
    Type "help" for help.
    
    test=# select by();
      by
    ----
      by
    (1 row)
    
    test=# select hello();
    ERROR:  function hello() does not exist
    LINE 1: select hello();
                    ^
    HINT:  No function matches the given name and argument types. You might 
    need to add explicit type casts.
    
    ----> The above is as expected.
    
    
    test=# \q
    postgres@jd-laptop:~$ pg_restore -d test -P 'by(),hello()' foo.sqlc
    postgres@jd-laptop:~$ psql -U postgres test;
    psql (9.1.8)
    Type "help" for help.
    
    test=# select hello();
    ERROR:  function hello() does not exist
    LINE 1: select hello();
    
    ----> This is where I am confused. It didn't restore hello() and it also 
    didn't error that the syntax of the restore command was invalid.
                    ^
    test=# drop function by();
    DROP FUNCTION
    test=#
    test=# q
    test-# \q
    postgres@jd-laptop:~$ pg_restore -d test -P 'by(),hello()' foo.sqlc
    postgres@jd-laptop:~$ psql -U postgres test;
    psql (9.1.8)
    Type "help" for help.
    
    test=# drop function by();
    ERROR:  function by() does not exist
    
    ----> by() not restored by above command
    
    
    test=# \q
    postgres@jd-laptop:~$ pg_restore -d test -P 'by()','hello()' foo.sqlc
    postgres@jd-laptop:~$ psql -U postgres test;
    psql (9.1.8)
    Type "help" for help.
    
    test=# drop function by();
    ERROR:  function by() does not exist
    test=# select hello();
    ERROR:  function hello() does not exist
    LINE 1: select hello();
                    ^
    HINT:  No function matches the given name and argument types. You might 
    need to add explicit type casts.
    
    ----> by() and hello() also not restored
    
    
    test=# \q
    postgres@jd-laptop:~$ pg_restore -d test -P 'by()' -P'hello()' foo.sqlc
    postgres@jd-laptop:~$ psql -U postgres test;
    psql (9.1.8)
    Type "help" for help.
    
    test=# select hello();
      hello
    -------
      hello
    (1 row)
    
    test=# select by();
    ERROR:  function by() does not exist
    LINE 1: select by();
    
    ----> hello() restored but by() was not.
    
    
    It appears we need better syntax checking.
    
    Sincerely,
    
    JD
    
    
    
    
  2. Re: pg_dump/restore syntax checking bug?

    Josh Kupershmidt <schmiddy@gmail.com> — 2013-03-23T05:13:00Z

    On Fri, Mar 22, 2013 at 9:35 PM, Joshua D. Drake <jd@commandprompt.com> wrote:
    
    > postgres@jd-laptop:~$ pg_restore -d test -P 'by(),hello()' foo.sqlc
    
    Note, the pg_restore doc makes no mention of trying to squeeze
    multiple function prototypes in a single argument you've done here, or
    of using multiple -P flags.
    
    > It appears we need better syntax checking.
    
    Can't really argue with this. But if you think these pg_restore
    examples are bad, try this gem:
      reindexdb --table='foo; ALTER ROLE limited WITH superuser'
    
    Josh
    
    
    
  3. Re: pg_dump/restore syntax checking bug?

    Joshua D. Drake <jd@commandprompt.com> — 2013-03-23T13:57:17Z

    On 03/22/2013 10:13 PM, Josh Kupershmidt wrote:
    >
    > On Fri, Mar 22, 2013 at 9:35 PM, Joshua D. Drake <jd@commandprompt.com> wrote:
    >
    >> postgres@jd-laptop:~$ pg_restore -d test -P 'by(),hello()' foo.sqlc
    >
    > Note, the pg_restore doc makes no mention of trying to squeeze
    > multiple function prototypes in a single argument you've done here, or
    > of using multiple -P flags.
    >
    >> It appears we need better syntax checking.
    >
    > Can't really argue with this. But if you think these pg_restore
    > examples are bad, try this gem:
    >    reindexdb --table='foo; ALTER ROLE limited WITH superuser'
    
    That is HORRIBLE! Looks like our base utilities need some attention.
    
    jD
    
    >
    > Josh
    >
    >