web-dev-qa-db-ja.com

generate_series(date、date)の取得は存在しません

このようなコマンドを実行すると、

SELECT * FROM generate_series('YESTERDAY'::date, 'TODAY'::date);
SELECT * FROM generate_series('YESTERDAY'::timestamp without time zone, 'TODAY'::timestamp without time zone);
SELECT * FROM generate_series('YESTERDAY'::timestamp with time zone, 'TODAY'::timestamp with time zone);

このようなエラーが発生しています、

ERROR:  function generate_series(date, date) does not exist
ERROR:  function generate_series(timestamp without time zone, timestamp without time zone) does not exist
ERROR:  function generate_series(timestamp with time zone, timestamp with time zone) does not exist

timestamp without time zone で日付系列を生成しようとすると、この同じエラーが発生します

1
Evan Carroll

PostgreSQL 8.4以降

これは generate_series現在入力がstepint、またはbigintでない場合、numericが必要ですdocs

returns: timestamp or timestamp with time zone
generate_series(start, stop, step interval)

と比較して

returns: int, bigint or numeric, step defaults to 1.
generate_series(start, stop, step DEFAULT 1)

救済するには、単に日を追加し、

SELECT d
FROM generate_series(
  'YESTERDAY'::date,
  'TODAY'::date,
  '1 day' -- REQUIRED STEP
) AS gs(d);

PostgreSQL 8.3より前

注: PostgreSQL 8.3以前を使用している場合にも、このエラーが発生することがあります。その場合、generate_seriesは非数値型をサポートしていません

Amazon Redshift

generate_seriesは、Amazon Redshiftで現在サポートされている場合とサポートされていない場合があります。AmazonRedshiftは、実際にはPostgreSQLではありません。それでもサポートされない場合は、stepの有無にかかわらずエラーが発生する可能性があります。

ERROR:  function generate_series(timestamp without time zone, timestamp without time zone, "unknown") does not exist

も参照してください、

多くの人がこれが機能すると報告していますが、ドキュメントはそれを反映するように更新されていません。

2
Evan Carroll