小编kbk*_*bkb的帖子

在 PostgreSQL 中,行顺序是否保留在函数和 CTE 中?

在 SELECT 语句中,如果未指定 ORDER BY 子句,则不能保证返回行的顺序。这适用于“普通”表。

对于使用 WITH 表达式 (CTE) 生成的有序表也是如此吗?函数返回的有序表?我认为不是。这是文档中明确说明的地方吗?

具体来说,我可以假设这个(更有效的)查询:

WITH ordered AS ( SELECT * FROM table1 ORDER BY col1 )
SELECT sum(col2) result FROM
generate_series(0,50) nr,
LATERAL (SELECT * FROM ordered LIMIT 100 OFFSET nr*100) a
GROUP BY nr ORDER BY nr;
Run Code Online (Sandbox Code Playgroud)

将等同于这个查询:

SELECT sum(col2) result FROM
generate_series(0,50) nr,
LATERAL (SELECT * FROM table1 ORDER BY col1 LIMIT 100 OFFSET nr*100) a
GROUP BY nr ORDER BY nr;
Run Code Online (Sandbox Code Playgroud)

对于函数:

如果我有这样的功能:

CREATE FUNCTION do_sort(name text[]) RETURNS TABLE(name …
Run Code Online (Sandbox Code Playgroud)

postgresql order-by

10
推荐指数
1
解决办法
2983
查看次数

在函数中使用 psql --set 变量

我想创建一个脚本,该脚本将创建一些自定义命名架构并在其中创建一些表和函数。像这样:

文件example.sh

#!/bin/bash

# this is the only place I want to set the schema name
SCH="ex"

export SCH

export PGPASSWORD="*******"

PSQL="psql \
  -X \
  -U postgres \
  -h localhost \
  --single-transaction \
  --echo-all \
  --set SCH=$SCH \
  --set ON_ERROR_STOP=on "

eval $PSQL "-f ./example.sql"
Run Code Online (Sandbox Code Playgroud)

文件example.sql

DROP SCHEMA IF EXISTS :SCH CASCADE;
CREATE SCHEMA :SCH;

CREATE TABLE :SCH.my_table
(
  id SERIAL PRIMARY KEY,
  my_col text
);

INSERT INTO :SCH.my_table (my_col) VALUES ('abc'), ('def');

CREATE OR REPLACE …
Run Code Online (Sandbox Code Playgroud)

postgresql psql scripting postgresql-9.5

2
推荐指数
1
解决办法
8826
查看次数

标签 统计

postgresql ×2

order-by ×1

postgresql-9.5 ×1

psql ×1

scripting ×1