正如我发现的,只有在以下情况下,SELECT * FROM t INTO my_data;件作品才有效:

DO $$
DECLARE
my_data t%ROWTYPE;
BEGIN
SELECT * FROM t INTO my_data WHERE id = ?;
END $$;

我说得对吗?

如果我只想得到2-3列,而不是所有列.我如何定义my_data

就是,

DO $$
DECLARE
my_data <WHAT HERE??>;
BEGIN
SELECT id,name,surname FROM t INTO my_data WHERE id = ?;
END $$;

推荐答案

只获取2-3列,而不是所有列

方法之一:使用record变量:

DO $$
DECLARE
   _rec record;
BEGIN
SELECT INTO _rec
            id, name, surname FROM t WHERE id = ?;
END $$;

请注意,record类型的 struct 在赋值之前是未定义的.因此,在执行此操作之前,不能引用列(字段).

另一种方法:分配多个标量变量:

DO $$
DECLARE
   _id int;
   _name text;
   _surname text;
BEGIN
SELECT INTO _id, _name, _surname
             id,  name,  surname FROM t WHERE id = ?;
END $$;

至于你的第一个例子:%ROWTYPE只是博士后的噪音.The documentation:

(因 for each 表都有一个同名的关联复合类型,

所以:

DO $$
DECLARE
   my_data t;  -- table name serves as type name, too. 
BEGIN
   SELECT INTO my_data  * FROM t WHERE id = ?;
END $$;

Postgresql相关问答推荐

如何使用postgr sql regex删除重复项和inc表记录

如何在Postgres中对分区表使用Hibernate验证?

让Docker Compose Container等待容器PostgreSQL并恢复

EF Core和npgsql连接池已被耗尽

为什么我使用 VBA 只能从 postgres 获得 10 行?

@符号在yacc中的函数中是什么意思

EF Core添加迁移目标postgreeSQL返回无法加载类型'Microsoft.EntityFrameworkCore.Storage.IRelationalValueBufferFactoryFactory

如何在 PostgreSQL 的回归测试中测试 TYPE 发送和接收函数

Psycopg2 在大型 Select 查询中耗尽内存

PostgreSQL ORDER BY 问题 - 自然排序

如何在构建时链接 docker 容器?

PostgreSQL 不区分大小写的 SELECT 数组

如何在psql中退出查询结果查看器?

使用 current_setting() 判断值

如何创建 postgres 数据库模式的 sql 脚本?

SQL 基本类型:integer vs int?

PostGIS - 将多面体转换为单面体

如何使用 sql 或 phpPgAdmin 更改 PostgreSQL 数据库的数据库编码?

如何查询前 10 行,下一次从表中查询其他 10 行

在 OS X 上使用 Postgres.app 时如何将 psql 放在路径上?