diff --git a/sqlparse/keywords.py b/sqlparse/keywords.py
index 1fd07c1..d68b4ae 100644
--- a/sqlparse/keywords.py
+++ b/sqlparse/keywords.py
@@ -167,6 +167,7 @@ KEYWORDS = {
     'COMMIT': tokens.Keyword.DML,
     'COMMITTED': tokens.Keyword,
     'COMPLETION': tokens.Keyword,
+    'CONCURRENTLY': tokens.Keyword,
     'CONDITION_NUMBER': tokens.Keyword,
     'CONNECT': tokens.Keyword,
     'CONNECTION': tokens.Keyword,

Support CONCURRENTLY keyword in CREATE INDEX statements
When parsing a statement like `CREATE INDEX CONCURRENTLY name ON ...`, "CONCURRENTLY name" is returned as a single identifier 
diff --git a/tests/test_regressions.py b/tests/test_regressions.py
index cf88419..cc553c2 100644
--- a/tests/test_regressions.py
+++ b/tests/test_regressions.py
@@ -343,3 +343,16 @@ def test_issue315_utf8_by_default():
     if PY2:
         tformatted = tformatted.decode('utf-8')
     assert formatted == tformatted
+
+
+def test_issue322_concurrently_is_keyword():
+    s = 'CREATE INDEX CONCURRENTLY myindex ON mytable(col1);'
+    p = sqlparse.parse(s)[0]
+
+    assert len(p.tokens) == 12
+    assert p.tokens[0].ttype is T.Keyword.DDL  # CREATE
+    assert p.tokens[2].ttype is T.Keyword      # INDEX
+    assert p.tokens[4].ttype is T.Keyword      # CONCURRENTLY
+    assert p.tokens[4].value == 'CONCURRENTLY'
+    assert isinstance(p.tokens[6], sql.Identifier)
+    assert p.tokens[6].value == 'myindex'

pip install -e .[dev]
parse_log_pytest
pytest
pytest pytest-cov
3.9
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
coverage==7.8.0
exceptiongroup @ file:///croot/exceptiongroup_1706031385326/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
packaging @ file:///croot/packaging_1734472117206/work
pluggy @ file:///croot/pluggy_1733169602837/work
pytest @ file:///croot/pytest_1738938843180/work
pytest-cov==6.0.0
-e git+https://github.com/andialbrecht/sqlparse.git@d67c442db4fd8b60a97440e84b9c21e80e4e958c#egg=sqlparse
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work

name: sqlparse
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - exceptiongroup=1.2.0=py39h06a4308_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - packaging=24.2=py39h06a4308_0
  - pip=25.0=py39h06a4308_0
  - pluggy=1.5.0=py39h06a4308_0
  - pytest=8.3.4=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py39h06a4308_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - coverage==7.8.0
      - pytest-cov==6.0.0
prefix: /opt/conda/envs/sqlparse

tests/test_regressions.py::test_issue322_concurrently_is_keyword
tests/test_regressions.py::test_issue9 tests/test_regressions.py::test_issue13 tests/test_regressions.py::test_issue26[--hello] tests/test_regressions.py::test_issue26[-- tests/test_regressions.py::test_issue26[--hello\n] tests/test_regressions.py::test_issue26[--] tests/test_regressions.py::test_issue26[--\n] tests/test_regressions.py::test_issue34[create] tests/test_regressions.py::test_issue34[CREATE] tests/test_regressions.py::test_issue35 tests/test_regressions.py::test_issue38 tests/test_regressions.py::test_issue39 tests/test_regressions.py::test_issue40 tests/test_regressions.py::test_issue78[get_name-z-select tests/test_regressions.py::test_issue78[get_real_name-y-select tests/test_regressions.py::test_issue78[get_parent_name-x-select tests/test_regressions.py::test_issue78[get_alias-z-select tests/test_regressions.py::test_issue78[get_typecast-text-select tests/test_regressions.py::test_issue83 tests/test_regressions.py::test_comment_encoding_when_reindent tests/test_regressions.py::test_parse_sql_with_binary tests/test_regressions.py::test_dont_alias_keywords tests/test_regressions.py::test_format_accepts_encoding tests/test_regressions.py::test_stream tests/test_regressions.py::test_issue90 tests/test_regressions.py::test_except_formatting tests/test_regressions.py::test_null_with_as tests/test_regressions.py::test_issue190_open_file tests/test_regressions.py::test_issue193_splitting_function tests/test_regressions.py::test_issue194_splitting_function tests/test_regressions.py::test_issue186_get_type tests/test_regressions.py::test_issue212_py2unicode tests/test_regressions.py::test_issue213_leadingws tests/test_regressions.py::test_issue227_gettype_cte tests/test_regressions.py::test_issue207_runaway_format tests/test_regressions.py::test_token_next_doesnt_ignore_skip_cm tests/test_regressions.py::test_issue284_as_grouping[SELECT tests/test_regressions.py::test_issue284_as_grouping[AS] tests/test_regressions.py::test_issue315_utf8_by_default
sqlparse/keywords.py
sqlparse/keywords.py