Обсуждение: dblink without running the full query remotely?
Per the documentation -- dblink fetches the entire remote query result before returning any of it to the local system -- I am guessing the answer is no, but I wondered if there was some way to do something like this:
create view myview as;
select * from dblink(
'server',
'select id from sometable')
cols(id bigint);
And then
select * from dblink(
'server',
'select id from sometable')
cols(id bigint);
And then
select * from myview where id = 123;
Where that remote sometable might have a bajillion rows and the local where would be passed to it otherwise it's days and days for all rows to be returned and then filtered.
Wells Oliver <wells.oliver@gmail.com> writes: > Per the documentation -- *dblink fetches the entire remote query result > before returning any of it to the local system* -- I am guessing the answer > is no, but I wondered if there was some way to do something like this: > ... > Where that remote sometable might have a bajillion rows and the local where > would be passed to it No, and it's unlikely anyone would ever put effort into making dblink do that, because the newer foreign table (FDW) code *does* handle that sort of thing. dblink still has its uses, but it's pretty much at a dead end developmentally. Take a look at postgres_fdw. regards, tom lane
Thanks, this it exactly.
Correlated, is there a way to define a fdw user mapping for a role versus for every single individual user in a database?
On Fri, Aug 25, 2023 at 2:16 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
Wells Oliver <wells.oliver@gmail.com> writes:
> Per the documentation -- *dblink fetches the entire remote query result
> before returning any of it to the local system* -- I am guessing the answer
> is no, but I wondered if there was some way to do something like this:
> ...
> Where that remote sometable might have a bajillion rows and the local where
> would be passed to it
No, and it's unlikely anyone would ever put effort into making dblink
do that, because the newer foreign table (FDW) code *does* handle that
sort of thing. dblink still has its uses, but it's pretty much at a
dead end developmentally. Take a look at postgres_fdw.
regards, tom lane
Wells Oliver
wells.oliver@gmail.com
wells.oliver@gmail.com
Probably this is neither possible in Oracle nor in Postgres.
If you are willing to take a complex route, Postgres will allow you to point to PUBLIC schema where you will need to export the objects at least once for each schema from the source environment.
I hope that I am not slipping any thing.
Thanks,
Sarwar
From: Wells Oliver <wells.oliver@gmail.com>
Sent: Friday, August 25, 2023 6:12 PM
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: pgsql-admin <pgsql-admin@postgresql.org>
Subject: Re: dblink without running the full query remotely?
Sent: Friday, August 25, 2023 6:12 PM
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: pgsql-admin <pgsql-admin@postgresql.org>
Subject: Re: dblink without running the full query remotely?
Thanks, this it exactly.
Correlated, is there a way to define a fdw user mapping for a role versus for every single individual user in a database?
On Fri, Aug 25, 2023 at 2:16 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
Wells Oliver <wells.oliver@gmail.com> writes:
> Per the documentation -- *dblink fetches the entire remote query result
> before returning any of it to the local system* -- I am guessing the answer
> is no, but I wondered if there was some way to do something like this:
> ...
> Where that remote sometable might have a bajillion rows and the local where
> would be passed to it
No, and it's unlikely anyone would ever put effort into making dblink
do that, because the newer foreign table (FDW) code *does* handle that
sort of thing. dblink still has its uses, but it's pretty much at a
dead end developmentally. Take a look at postgres_fdw.
regards, tom lane
Wells Oliver
wells.oliver@gmail.com
wells.oliver@gmail.com