Hi shahjapan,
Sorry I hadn't got back to you. I've been sick for the last couple of days and not looking at this forum. :(
I think we're talking about several different things here.
I don't have an Ubuntu (or other Debian) system here to comment on, but I can describe how things work on some other kinds of system and you may be able to adapt from that.
On any unix-like system, there are a lot of daemons, so we need to be careful about which one we are talking about at any given time.
What you are apparently trying to do is to start your postgreSQL (daemon/server) and pass it a port number as you do, correct?
In order to do this, you have written a script and placed it in rc.local. Have you looked at the other scripts in rc.local? My guess is that this is the first and only script in rc.local, so you should look at other scripts in rc*.d to see how they work.
What I suspect you will find is the start-stop-daemon is NOT invoked from those scripts. Rather those scripts are what start-stop-daemon runs, at least that is how the equivalent works on other systems (e.g., Fedora, Solaris, etc.). That is, the startup procedure goes through the appropriate rc directories and runs the various startup scripts that it finds there. THOSE scripts set the parameters for the various servers (daemons) that are started this way. (Often by starting the servers using a config file.)
For example, a typical startup script, such as /etc/rc.d/rc3.d/K36mysqld (which is actually a symlink to /etc/rc.d/init.d/mysqld) will then check the command line by which it was called, determine from that whether it was supposed to start, stop, restart, etc. and then do the right thing. If it is supposed to start the mysql server, it points the server to the appropriate configuration file. In other cases, the server daemons are started by passing them parameters directly.
Pick a script among your init scripts and see how parameters are passed to the servers in them.
HTH,
Paul