Postgresql 使用';比如';在INSERT语句中描述来自dblink的记录';ed SELECT语句
我试图简化以下最后陈述:Postgresql 使用';比如';在INSERT语句中描述来自dblink的记录';ed SELECT语句,postgresql,Postgresql,我试图简化以下最后陈述: DROP TABLE asdf; CREATE TABLE asdf (LIKE calibrations); INSERT INTO asdf (rid, pid, status, cal_date, project_name, username, sensor_type, serial_number, var_name, dsm_name, cal_type, channel, gainbplr, ads_file_name, set_times, se
DROP TABLE asdf;
CREATE TABLE asdf (LIKE calibrations);
INSERT INTO asdf (rid, pid, status, cal_date, project_name, username,
sensor_type, serial_number, var_name, dsm_name, cal_type, channel,
gainbplr, ads_file_name, set_times, set_points, averages, stddevs, cal,
temperature, comment)
SELECT * FROM dblink(
'host=remoteserv user=auser password=hello dbname=cals',
'SELECT * FROM calibrations WHERE username=\'JAM\'') AS
t(rid character varying(20), pid character varying(20),
status character(3), cal_date timestamp,
project_name character varying(32), username character varying(32),
sensor_type character varying(20), sn character varying(20),
var_name character varying(20), dsm_name character varying(16),
cal_type character varying(16), channel character(1),
gainbplr character(2), ads_file_name character varying(40),
set_times timestamp[], set_points double precision[],
averages double precision[], stddevs double precision[],
cal double precision[], temperature double precision,
comment character varying(256));
我能够将最后一句话简化为:
INSERT INTO asdf
SELECT * FROM dblink(
'host=remoteserv user=auser password=hello dbname=cals',
'SELECT * FROM calibrations WHERE username=\'JAM\'') AS
t(rid character varying(20), pid character varying(20),
status character(3), cal_date timestamp,
project_name character varying(32), username character varying(32),
sensor_type character varying(20), sn character varying(20),
var_name character varying(20), dsm_name character varying(16),
cal_type character varying(16), channel character(1),
gainbplr character(2), ads_file_name character varying(40),
set_times timestamp[], set_points double precision[],
averages double precision[], stddevs double precision[],
cal double precision[], temperature double precision,
comment character varying(256));
最后一句话可以这样写吗
INSERT INTO asdf
SELECT * FROM dblink(
'host=remoteserv user=auser password=hello dbname=cals',
'SELECT * FROM calibrations WHERE username=\'JAM\'') AS
t(LIKE calibrations);
--John否,dblink()函数返回setof record
,数据库需要知道列列表。dblink文档中提到了这一点:
函数返回查询生成的行。因为dblink可以与
任何查询,都声明为返回记录,而不是指定任何特定的
一组列。这意味着您必须在
调用查询-否则PostgreSQL将不知道会发生什么
SELECT
语句的FROM
子句具有以下定义:
where from_item can be one of:
[ ONLY ] table_name [ * ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
( select ) [ AS ] alias [ ( column_alias [, ...] ) ]
with_query_name [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
function_name ( [ argument [, ...] ] ) [ AS ] alias [ ( column_alias [, ...] | column_definition [, ...] ) ]
function_name ( [ argument [, ...] ] ) AS ( column_definition [, ...] )
from_item [ NATURAL ] join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]